免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 4098 | 回复: 18
打印 上一主题 下一主题

大家平时编写代码的编程风格如何? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-09-01 18:52 |只看该作者 |倒序浏览
我总觉得GNU 编程风格总感觉很不适应。。
习惯用内核编程风格

论坛徽章:
0
2 [报告]
发表于 2010-09-01 19:02 |只看该作者
GNU是啥风格的?

论坛徽章:
0
3 [报告]
发表于 2010-09-01 19:21 |只看该作者
下面是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;

论坛徽章:
0
4 [报告]
发表于 2010-09-01 20:08 |只看该作者
那就BSD风格吧。

论坛徽章:
0
5 [报告]
发表于 2010-09-01 20:27 |只看该作者
到哪里就要用哪里的风格。。。

论坛徽章:
12
巳蛇
日期:2013-09-16 15:32:242015年辞旧岁徽章
日期:2015-03-03 16:54:152015年亚洲杯之约旦
日期:2015-02-11 14:38:37双鱼座
日期:2015-01-05 11:05:47戌狗
日期:2014-12-08 09:41:18戌狗
日期:2014-08-15 09:29:29双子座
日期:2014-08-05 09:17:17卯兔
日期:2014-06-08 15:32:18巳蛇
日期:2014-01-27 08:47:08白羊座
日期:2013-11-28 21:04:15巨蟹座
日期:2013-11-13 21:58:012015年亚洲杯之科威特
日期:2015-04-17 16:51:51
6 [报告]
发表于 2010-09-01 22:13 |只看该作者
Google的风格不错,我看着顺眼

论坛徽章:
0
7 [报告]
发表于 2010-09-01 23:02 |只看该作者
我最讨厌的风格之一是仅仅因为只有一行就if/else后面不跟花括号. 如

  1. if(a>1)
  2.     a++
  3. else
  4.     b++
复制代码
多写上花括号, 不是方便修改吗? 不是更美观吗?

论坛徽章:
89
水瓶座
日期:2014-04-01 08:53:31天蝎座
日期:2014-04-01 08:53:53天秤座
日期:2014-04-01 08:54:02射手座
日期:2014-04-01 08:54:15子鼠
日期:2014-04-01 08:55:35辰龙
日期:2014-04-01 08:56:36未羊
日期:2014-04-01 08:56:27戌狗
日期:2014-04-01 08:56:13亥猪
日期:2014-04-01 08:56:02亥猪
日期:2014-04-08 08:38:58程序设计版块每日发帖之星
日期:2016-01-05 06:20:00程序设计版块每日发帖之星
日期:2016-01-07 06:20:00
8 [报告]
发表于 2010-09-01 23:05 |只看该作者
man style

论坛徽章:
89
水瓶座
日期:2014-04-01 08:53:31天蝎座
日期:2014-04-01 08:53:53天秤座
日期:2014-04-01 08:54:02射手座
日期:2014-04-01 08:54:15子鼠
日期:2014-04-01 08:55:35辰龙
日期:2014-04-01 08:56:36未羊
日期:2014-04-01 08:56:27戌狗
日期:2014-04-01 08:56:13亥猪
日期:2014-04-01 08:56:02亥猪
日期:2014-04-08 08:38:58程序设计版块每日发帖之星
日期:2016-01-05 06:20:00程序设计版块每日发帖之星
日期:2016-01-07 06:20:00
9 [报告]
发表于 2010-09-01 23:06 |只看该作者

论坛徽章:
0
10 [报告]
发表于 2010-09-02 00:24 |只看该作者
本帖最后由 ideawu 于 2010-09-02 00:26 编辑

无论是谁提倡的, 不写成

  1. if(a > 1){
  2.     a++;
  3. }else{
  4.     b++;
  5. }
复制代码
而是写成

  1.    1. if(a>1)
  2.    2.     a++
  3.    3. else
  4.    4.     b++
复制代码
后者的代码都是狗屎! 不写花括号, 干脆去写python算了.
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP