大家平时编写代码的编程风格如何?
时间:2010-09-01
来源:互联网
我总觉得GNU 编程风格总感觉很不适应。。
习惯用内核编程风格
习惯用内核编程风格
作者: dawnwish 发布时间: 2010-09-01
GNU是啥风格的?
作者: zhangsuozhu 发布时间: 2010-09-01
下面是GNU对C程序的风格要求:
1. 函数的开头的左花括号放到最左边,避免把任何其它的左花括号、左括号或者左方括号放到最左边。对于函数定义来说,把函数名的起始字符放到最左边也同样重要。这帮助任何寻找函数定义,并且可能有助于帮助某些工具识别它们。因此,正确的格式应该是: static char * concat (s1, s2) /* Name starts in column zero here */ char *s1, *s2; { /* Open brace in column zero here */ ... } 或者,如果希望使用标准C,定义的格式是: static char * concat (char *s1, char *s2) { ... } 如果参数不能够被美观地放在一行中,按照下面的方式把它们分开: int lots_of_args (int an_integer, long a_long, short a_short, double a_double, float a_float) ... 对于函数体,我们希望它按照如下方式排版: if (x < foo (y, z)) haha = bar[4] + 5; else { while (z) { haha += foo (z, z); z--; } return ++x + bar (); } 在左括号之前以及逗号之后添加空格将使程序更加容易阅读。尤其是在逗号之后添加空格。当我们把一个表达式分成多行的时候,在操作符之前而不是之后分割。 if (foo_this_is_long && bar > win (x, y, z) && remaining_condition)
2. 尽力避免让两个不同优先级的操作符出现在相同的对齐方式中。例如,不要象下面那样写: mode = (inmode[j] == VOIDmode || GET_MODE_SIZE (outmode[j]) > GET_MODE_SIZE (inmode[j]) ? outmode[j] : inmode[j]); 应该附加额外的括号以使得文本缩进可以表示出这种嵌套: mode = ((inmode[j] == VOIDmode || (GET_MODE_SIZE (outmode[j]) > GET_MODE_SIZE (inmode[j]))) ? outmode[j] : inmode[j]);
3. 按照如下方式排版do-while语句: do { a = foo (a); } while (a > 0);
4. 每个程序都应该以一段简短地、说明其功能的注释开头。 例如:`fmt - filter for simple filling of text'。
5. 请为每个函数书写注释以说明函数做了些什么,需要哪些种类的参数,参数可能值的含义以及用途。如果按照常见的方式使用C语言类型,就没有必要逐字重写C参数声明的含义。如果它使用了任何非标准的东西,或者是可能导致函数不能工作的任何可能的值(例如,不能保证正确处理一个包含了新行的字符串),请确认对它们进行了说明。如果存在重要的返回值,也需要对其进行解释。
6. 不要在跨越了行的声明中声明多个变量。在每一行中都以一个新的声明开头。例如,不应该: int foo, bar; 而应该: int foo, bar; 或者: int foo; int bar; 如果它们是全局变量,在它们之中的每一个之前都应该添加一条注释。
7. 当在一个if语句中嵌套了另一个if-else语句,总是用花括号把if-else括起来。因此,不要写: if (foo) if (bar) win (); else lose (); 而总是要写: if (foo) { if (bar) win (); else lose (); } 如果在else语句中嵌套了一个if语句,即可以像下面那样写else if: if (foo) ... else if (bar) ... 按照与then那部分代码相同的缩进方式缩进else if的then部分代码,也可以在花括号中像下面那样把if嵌套起来: if (foo) ... else { if (bar) ... }
8. 要在同一个声明中同时说明结构标识和变量或者结构标试和类型定义(typedef)。 单独地说明结构标试,而后用它定义变量或者定义类型。
9. 尽力避免在if的条件中进行赋值。例如,不要写: if ((foo = (char *) malloc (sizeof *foo)) == 0) fatal ("virtual memory exhausted"); 而要写: foo = (char *) malloc (sizeof *foo); if (foo == 0) fatal ("virtual memory exhausted");
10. 请在名字中使用下划线以分隔单词,坚持使用小写; 把大写字母留给宏和枚举常量,以及根据统一的惯例使用的前缀。 例如,应该使用类似ignore_space_change_flag的名字;不要使用类似iCantReadThis的名字。
11. 用于标明一个命令行选项是否被给出的变量应该在选项含义的说明之后,而不是选项字符 之后,被命名。一条注释即应该说明选项的精确含义,还应该说明选项的字母。例如, /* Ignore changes in horizontal whitespace (-b). */ int ignore_space_change_flag;
1. 函数的开头的左花括号放到最左边,避免把任何其它的左花括号、左括号或者左方括号放到最左边。对于函数定义来说,把函数名的起始字符放到最左边也同样重要。这帮助任何寻找函数定义,并且可能有助于帮助某些工具识别它们。因此,正确的格式应该是: static char * concat (s1, s2) /* Name starts in column zero here */ char *s1, *s2; { /* Open brace in column zero here */ ... } 或者,如果希望使用标准C,定义的格式是: static char * concat (char *s1, char *s2) { ... } 如果参数不能够被美观地放在一行中,按照下面的方式把它们分开: int lots_of_args (int an_integer, long a_long, short a_short, double a_double, float a_float) ... 对于函数体,我们希望它按照如下方式排版: if (x < foo (y, z)) haha = bar[4] + 5; else { while (z) { haha += foo (z, z); z--; } return ++x + bar (); } 在左括号之前以及逗号之后添加空格将使程序更加容易阅读。尤其是在逗号之后添加空格。当我们把一个表达式分成多行的时候,在操作符之前而不是之后分割。 if (foo_this_is_long && bar > win (x, y, z) && remaining_condition)
2. 尽力避免让两个不同优先级的操作符出现在相同的对齐方式中。例如,不要象下面那样写: mode = (inmode[j] == VOIDmode || GET_MODE_SIZE (outmode[j]) > GET_MODE_SIZE (inmode[j]) ? outmode[j] : inmode[j]); 应该附加额外的括号以使得文本缩进可以表示出这种嵌套: mode = ((inmode[j] == VOIDmode || (GET_MODE_SIZE (outmode[j]) > GET_MODE_SIZE (inmode[j]))) ? outmode[j] : inmode[j]);
3. 按照如下方式排版do-while语句: do { a = foo (a); } while (a > 0);
4. 每个程序都应该以一段简短地、说明其功能的注释开头。 例如:`fmt - filter for simple filling of text'。
5. 请为每个函数书写注释以说明函数做了些什么,需要哪些种类的参数,参数可能值的含义以及用途。如果按照常见的方式使用C语言类型,就没有必要逐字重写C参数声明的含义。如果它使用了任何非标准的东西,或者是可能导致函数不能工作的任何可能的值(例如,不能保证正确处理一个包含了新行的字符串),请确认对它们进行了说明。如果存在重要的返回值,也需要对其进行解释。
6. 不要在跨越了行的声明中声明多个变量。在每一行中都以一个新的声明开头。例如,不应该: int foo, bar; 而应该: int foo, bar; 或者: int foo; int bar; 如果它们是全局变量,在它们之中的每一个之前都应该添加一条注释。
7. 当在一个if语句中嵌套了另一个if-else语句,总是用花括号把if-else括起来。因此,不要写: if (foo) if (bar) win (); else lose (); 而总是要写: if (foo) { if (bar) win (); else lose (); } 如果在else语句中嵌套了一个if语句,即可以像下面那样写else if: if (foo) ... else if (bar) ... 按照与then那部分代码相同的缩进方式缩进else if的then部分代码,也可以在花括号中像下面那样把if嵌套起来: if (foo) ... else { if (bar) ... }
8. 要在同一个声明中同时说明结构标识和变量或者结构标试和类型定义(typedef)。 单独地说明结构标试,而后用它定义变量或者定义类型。
9. 尽力避免在if的条件中进行赋值。例如,不要写: if ((foo = (char *) malloc (sizeof *foo)) == 0) fatal ("virtual memory exhausted"); 而要写: foo = (char *) malloc (sizeof *foo); if (foo == 0) fatal ("virtual memory exhausted");
10. 请在名字中使用下划线以分隔单词,坚持使用小写; 把大写字母留给宏和枚举常量,以及根据统一的惯例使用的前缀。 例如,应该使用类似ignore_space_change_flag的名字;不要使用类似iCantReadThis的名字。
11. 用于标明一个命令行选项是否被给出的变量应该在选项含义的说明之后,而不是选项字符 之后,被命名。一条注释即应该说明选项的精确含义,还应该说明选项的字母。例如, /* Ignore changes in horizontal whitespace (-b). */ int ignore_space_change_flag;
作者: dawnwish 发布时间: 2010-09-01
那就BSD风格吧。
作者: langue 发布时间: 2010-09-01
到哪里就要用哪里的风格。。。
作者: rain_fish 发布时间: 2010-09-01
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28