首页 > 代码库 > 小野熊的c语言编程风格
小野熊的c语言编程风格
模仿bsd编码规范写了个给自己的规范,呵呵。
?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 | /* * 非常重要的单行注释像这样 */ /* 一般的单行注释这样写 */ /* * 多行注释 * 这样写 */ //这种c++注释风格只可以用在调试(注释代码)上,不能做一般的注释 /* 所以上一句是不符合小野熊编程规范的 */ #if 0 如果你有大段代码要注释,用# if 0 如果你正在调试两种情况,用# if 0 + # else 因为可以方便的把# if 0改为# if 1 #else 这样就可以快速切换到这里的代码 #endif /* 这是另一种注释代码的方式 当你要重新启用这里的代码时 就把第一行的/*变成//* 很神奇吧 //*/ #include <assert.h> /* include文件时记得按首字母排序 */ #include <stdio.h> /* 先include系统(/usr/include)里的头文件 再include自己的头文件 */ #include <unistd.h> /* 记得空一行 */ #include "stack.h" #undef SWAP #define SWAP(x,y) do { \ typeof(x) tmp = (x); \ (x) = (y); \ (y) = tmp; \ } while (0) /* * 写宏的时候学会用末尾的\以及do ... while(0) * 并且先把它给undef了,免得出错 * 放心,假如这个宏原本就没有定义的话#undef也不会出错 * 另外,宏名全大写 */ enum boolean { TRUE = 1, FALSE = 0 }; /* * 写enum的时候把member都写成全大写 * enum最后会被当作宏定义来处理 */ /* * 无论一个结构体中记录数据的类型有多小,都请用另一个结构体来包装 * 因为这样不仅增强了可读性 * 而且扩展起来也方便 */ struct foodata { char *string; /* 千万不要用data之类的名字 —— 万一你有好几个member呢?管她们叫data1 data2? */ }; typedef int count; /* 永恒不变的类型用typedef来包装 增强可读性 */ struct foo { struct foo *next; struct foodata data; /* 现在就可以用data了 */ count len; }; /* * 无论如何,千万不要用typedef来包装结构体!! */ static char function( int ); /* 函数原型不用写出形参名 */ static void usage( void ); int /* 定义完整函数时, 第一行为函数返回值 */ main( int argc, char **argv) /* 第二行为函数名以及形参名以及形参类型 */ { /* 第三行留给单独的开大括号 */ int ch; enum boolean aflag = FALSE; enum boolean fflag = FALSE; while ((ch = getopt(argc, argv, "oaf:" )) != -1) { /* * 像这些while,for,和if就不要单独留一行给开大括号了 * 处理命令行形参用getopt(man 3 getopt) */ switch (ch) { /* 开大括号后需缩进 */ case ‘a‘ : /* case是个例外 */ aflag = TRUE; /* FALLTHROUGH */ /* 使用switch特殊用法时需注明 */ case ‘f‘ : fflag = FALSE; break ; case ‘o‘ : putchar (function(1)); break ; case ‘?‘ : /* FALLTHROUGH */ default : usage(); } } for (;;) ; /* 不管for,while,if的语句有多短,都要缩进 */ for (;;) { function(2); function(3); usage(); } for (;;) /* 如果只有一个语句就不要写开大括号了 */ SWAP(ch, aflag); /* 函数调用以及声明时在‘,‘后加一个空格 */ while (1) /* 缩进一般为8格 */ ch = a + really + long + statement + that + needs + /* 如果一个表达式太长,怎样美观怎样缩进(用空格) */ two + lines; /* 但是她最前面必须跟随上一行来用tab缩进 */ return 0; } static char function( int a) { /* 最后声明完整的函数 */ return (a == 0) ? a : function( abs (a) - 1); } static void usage( void ) { fprintf (stderr, "usage: f [-aDde] [-b b_arg] [-m m_arg] req1 req2 [opt1 [opt2]] \n" "usage: f [-a | -b] [-c [-dEe] [-n number]] \n" ); } /* 如果这个程序有什么bug的话,在文件末尾写上 */ /* * 这个程序不能运行 */ /* 最后写作者信息 */ /* Author: Louis(TinyKUMA) Lisp-CN <46897asd@gmail.com> */ /* 记得最后一行必须是空着的 */ |
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。