码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 浅谈C/C++指针和引用在Linux和Windows不同环境下的编码风格


    目录

    0. 前言

    1. 代码块、函数体上的  {  }  的规范

    2. 指针和引用中的 * 和 & 符号的位置

    1. Linux 环境下编码风格(gcc)

    2. Windows 环境下编码风格(Visual Studio)

    3. 简单总结


    0. 前言

    C/C++因为高度的自由性,并没有对一些常见的编码风格进行限制,所以我们能看到各种各样不同的风格。举几个例子来看,比如一下两种常见的情况:

    1. 代码块、函数体上的  {  }  的规范

    1. // 常见写法中的第一种写法:
    2. void func()
    3. {
    4. // ...
    5. }
    6. // 常见写法中的第二种写法:
    7. void func() {
    8. // ...
    9. }

    2. 指针和引用中的 * 和 & 符号的位置

    这里详细的写法我们下面再看。


    对于 第一种 代码块、函数体上的  {  }  的规范呢,Golang语言中强制规定了风格为上述常见写法中的第二种写法。Python语言中呢直接取消了 { }  ,直接使用缩进来控制。

    我认为这样在语法层面上直接控制代码风格是一种解决出现各种各样不同代码风格的代码的很好的一种方式,是大大提高了代码的可读性,也降低了团队协同开发的成本。

    所以,在C/C++中,我想直接引用 林锐博士 的《高质量C++/C编程指南》之中的风格,就不做过多的讨论了~!

    对于林锐博士的这样C/C++代码风格呢,我个人还是十分喜欢的~~(当然没有不喜欢Golang风格的意思,哈哈~)

    这篇文章呢,我希望主要来谈论 “指针和引用中的 * 和 & 符号的位置” 这个问题~!


    这一部分,我们接着讨论 “指针和引用中的 * 和 & 符号的位置” 的问题!

    1. Linux 环境下编码风格(gcc)

    我们直接先看代码,通过代码来看这一种代码风格~

    1. // 指针的风格
    2. int *func(void)
    3. {
    4. int *ptr = (int *)malloc(sizeof(int));
    5. int* *pptr = &ptr;
    6. return ptr;
    7. }
    8. // 引用的风格
    9. int main()
    10. {
    11. int a = 10;
    12. int &b = a;
    13. return 0;
    14. }

    在Linux 环境下,我们喜欢将这颗 * 的位置更靠近变量ptr,来表示这个变量是一个指针变量,指向的变量的类型是前面类型 int。

    对于二级指针呢,依然是后面的那颗 * 的位置,靠近变量pptr,来表示这个变量是一个指针变量,指向的变量的类型是前面的类型 int*。

    引用变量也是同样的道理,我们将 & 符号 放在靠经变量的位置,来表示这个变量是一个引用变量。

    2. Windows 环境下编码风格(Visual Studio)

    1. // 指针的风格
    2. int* func(void)
    3. {
    4. int* ptr = (int*)malloc(sizeof(int));
    5. int** pptr = &ptr;
    6. return ptr;
    7. }
    8. // 引用的风格
    9. int main()
    10. {
    11. int a = 10;
    12. int& b = a;
    13. return 0;
    14. }

    在Windows环境下,我们喜欢将这个 * 的位置放在靠近类型的位置,来表明这个变量的类型是int*,而在变量类型是有*,那么说明这个变量是指针变量,指向的类型就是 * 前面的类型。

    对于二级指针,依然是将这个 * 的位置放在靠近类型的位置,来表明这个变量的类型是int**,有两颗星说明这是一个二级指针变量,指向的类型就是第二颗 * 前面的类型。

    对于引用来说呢,也是也指针一样的道理, & 符号的位置更靠近类型,来表用这个变量的类型是int&。

    3. 简单总结

    指针和引用的书写风格,属于是“仁者见仁,智者见智”,但是我的认为是Linux环境下的风格比较漂亮,易于理解。因为我认为,对于指针变量来说,我们的逻辑应该是先知道它是一个指针,再看它指向什么类型的变量。我看来这样更加的容易理解。

    这里呢除了上面说过的 林锐博士 的《高质量C++/C编程指南》呢,再推荐一些比较权威的C/C++的规范供大家参考!

    谷歌的C/C++代码规范

    C++ 风格指南 - 内容目录 — Google 开源项目风格指南

    360C/C++代码规范

    https://github.com/Qihoo360/safe-rules

  • 相关阅读:
    无损压缩算法
    操作系统4小时速成:进程管理占考试40%,进程状态,组织,通信,线程拥有调度,进程拥有资源,进程和线程的区别
    女友晚安之后依然在线:python男友用20行代码写了个小工具
    python多线程Thread执行for循环并得到返回结果
    【C++技能树】Lambda表达式
    Linux 安全 - LSM hook点
    (g6)Radial 辐射布局
    java毕业设计——基于java+MMAS的蚁群算法路由选择可视化动态模拟设计与实现(毕业论文+程序源码)——蚁群算法路由选择可视化动态模拟
    jenkins获取Gerrit变量owner失败
    企业订货系统常见问题与解决方案|网站定制搭建|小程序APP开发
  • 原文地址:https://blog.csdn.net/2301_80868191/article/details/141089896
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号