目录
0. 前言
1. 代码块、函数体上的 { } 的规范
2. 指针和引用中的 * 和 & 符号的位置
1. Linux 环境下编码风格(gcc)
2. Windows 环境下编码风格(Visual Studio)
3. 简单总结
0. 前言
C/C++因为高度的自由性,并没有对一些常见的编码风格进行限制,所以我们能看到各种各样不同的风格。举几个例子来看,比如一下两种常见的情况:
1. 代码块、函数体上的 { } 的规范
// 常见写法中的第一种写法:
void func()
{
// ...
}
// 常见写法中的第二种写法:
void func() {
// ...
}
2. 指针和引用中的 * 和 & 符号的位置
这里详细的写法我们下面再看。
对于 第一种 代码块、函数体上的 { } 的规范呢,Golang语言中强制规定了风格为上述常见写法中的第二种写法。Python语言中呢直接取消了 { } ,直接使用缩进来控制。
我认为这样在语法层面上直接控制代码风格是一种解决出现各种各样不同代码风格的代码的很好的一种方式,是大大提高了代码的可读性,也降低了团队协同开发的成本。
所以,在C/C++中,我想直接引用 林锐博士 的《高质量C++/C编程指南》之中的风格,就不做过多的讨论了~!
对于林锐博士的这样C/C++代码风格呢,我个人还是十分喜欢的~~(当然没有不喜欢Golang风格的意思,哈哈~)
这篇文章呢,我希望主要来谈论 “指针和引用中的 * 和 & 符号的位置” 这个问题~!
这一部分,我们接着讨论 “指针和引用中的 * 和 & 符号的位置” 的问题!
1. Linux 环境下编码风格(gcc)
我们直接先看代码,通过代码来看这一种代码风格~
// 指针的风格
int *func(void)
{
int *ptr = (int *)malloc(sizeof(int));
int* *pptr = &ptr;
return ptr;
}
// 引用的风格
int main()
{
int a = 10;
int &b = a;
return 0;
}
在Linux 环境下,我们喜欢将这颗 * 的位置更靠近变量ptr,来表示这个变量是一个指针变量,指向的变量的类型是前面类型 int。
对于二级指针呢,依然是后面的那颗 * 的位置,靠近变量pptr,来表示这个变量是一个指针变量,指向的变量的类型是前面的类型 int*。
引用变量也是同样的道理,我们将 & 符号 放在靠经变量的位置,来表示这个变量是一个引用变量。
2. Windows 环境下编码风格(Visual Studio)
// 指针的风格
int* func(void)
{
int* ptr = (int*)malloc(sizeof(int));
int** pptr = &ptr;
return ptr;
}
// 引用的风格
int main()
{
int a = 10;
int& b = a;
return 0;
}
在Windows环境下,我们喜欢将这个 * 的位置放在靠近类型的位置,来表明这个变量的类型是int*,而在变量类型是有*,那么说明这个变量是指针变量,指向的类型就是 * 前面的类型。
对于二级指针,依然是将这个 * 的位置放在靠近类型的位置,来表明这个变量的类型是int**,有两颗星说明这是一个二级指针变量,指向的类型就是第二颗 * 前面的类型。
对于引用来说呢,也是也指针一样的道理, & 符号的位置更靠近类型,来表用这个变量的类型是int&。
3. 简单总结
指针和引用的书写风格,属于是“仁者见仁,智者见智”,但是我的认为是Linux环境下的风格比较漂亮,易于理解。因为我认为,对于指针变量来说,我们的逻辑应该是先知道它是一个指针,再看它指向什么类型的变量。我看来这样更加的容易理解。
这里呢除了上面说过的 林锐博士 的《高质量C++/C编程指南》呢,再推荐一些比较权威的C/C++的规范供大家参考!
谷歌的C/C++代码规范
C++ 风格指南 - 内容目录 — Google 开源项目风格指南
360C/C++代码规范
https://github.com/Qihoo360/safe-rules