Based on kernel version 3.9. Page generated on 2013-05-02 23:17 EST.
1 Chinese translated version of Documentation/CodingStyle 2 3 If you have any comment or update to the content, please post to LKML directly. 4 However, if you have problem communicating in English you can also ask the 5 Chinese maintainer for help. Contact the Chinese maintainer, if this 6 translation is outdated or there is problem with translation. 7 8 Chinese maintainer: Zhang Le <r0bertz@gentoo.org> 9 --------------------------------------------------------------------- 10 Documentation/CodingStyleçä¸æç¿»è¯ 11 12 妿æ³è¯è®ºææ´æ°æ¬æçå 容ï¼è¯·ç´æ¥åä¿¡å°LKMLãå¦æä½ ä½¿ç¨è±æäº¤æµæå°é¾çè¯ï¼ä¹å¯ 13 以å䏿çç»´æ¤è æ±å©ã妿æ¬ç¿»è¯æ´æ°ä¸åæ¶æè ç¿»è¯åå¨é®é¢ï¼è¯·èç³»ä¸æçç»´æ¤è ã 14 15 䏿çç»´æ¤è ï¼ å¼ ä¹ Zhang Le <r0bertz@gentoo.org> 16 䏿çç¿»è¯è ï¼ å¼ ä¹ Zhang Le <r0bertz@gentoo.org> 17 ä¸æçæ ¡è¯è ï¼ çèª Wang Cong <xiyou.wangcong@gmail.com> 18 wheelz <kernel.zeng@gmail.com> 19 管æä¸ Xudong Guan <xudong.guan@gmail.com> 20 Li Zefan <lizf@cn.fujitsu.com> 21 Wang Chen <wangchen@cn.fujitsu.com> 22 以ä¸ä¸ºæ£æ 23 --------------------------------------------------------------------- 24 25 Linuxå æ ¸ä»£ç 飿 ¼ 26 27 è¿æ¯ä¸ä¸ªç®ççææ¡£ï¼æè¿°äºlinuxå æ ¸çé¦é代ç 飿 ¼ã代ç 飿 ¼æ¯å 人èå¼çï¼è䏿 28 䏿¿æææçè§ç¹å¼ºå ç»ä»»ä½äººï¼ä¸è¿è¿éæè®²è¿°çæ¯æå¿ é¡»è¦ç»´æ¤çä»£ç æéµå®ç飿 ¼ï¼ 29 并䏿ä¹å¸æç»å¤§å¤æ°å ¶ä»ä»£ç ä¹è½éµå®è¿ä¸ªé£æ ¼ã请å¨åä»£ç æ¶è³å°èèä¸ä¸æ¬ææè¿°ç 30 飿 ¼ã 31 32 é¦å ï¼æå»ºè®®ä½ æå°ä¸ä»½GNU代ç è§èï¼ç¶åä¸è¦è¯»å®ãç§äºå®ï¼è¿æ¯ä¸ä¸ªå ·æéå¤§è±¡å¾æ§ 33 æä¹çå¨ä½ã 34 35 ä¸ç®¡ææ ·ï¼ç°å¨æä»¬å¼å§ï¼ 36 37 38 第ä¸ç« ï¼ç¼©è¿ 39 40 å¶è¡¨ç¬¦æ¯8个åç¬¦ï¼æä»¥ç¼©è¿ä¹æ¯8个å符ãæäºå¼ç«¯è¿å¨è¯å¾å°ç¼©è¿å为4ï¼ä¹è³2ï¼ä¸ªå符 41 æ·±ï¼è¿å ä¹ç¸å½äºå°è¯å°åå¨ççå¼å®ä¹ä¸º3ã 42 43 çç±ï¼ç¼©è¿çå ¨é¨æä¹å°±å¨äºæ¸ æ¥çå®ä¹ä¸ä¸ªæ§å¶åèµ·æ¢äºä½å¤ãå°¤å ¶æ¯å½ä½ ç¯çä½ çå±å¹ 44 è¿ç»çäº20å°æ¶ä¹åï¼ä½ å°ä¼åç°å¤§ä¸ç¹ç缩è¿ä¼ä½¿ä½ æ´å®¹æå辨缩è¿ã 45 46 ç°å¨ï¼æäºäººä¼æ±æ¨8个å符ç缩è¿ä¼ä½¿ä»£ç åå³è¾¹ç§»å¨ç太è¿ï¼å¨80个å符çç»ç«¯å±å¹ä¸ 47 å°±å¾é¾è¯»è¿æ ·ç代ç ãè¿ä¸ªé®é¢ççæ¡æ¯ï¼å¦æä½ éè¦3级以ä¸ç缩è¿ï¼ä¸ç®¡ç¨ä½ç§æ¹å¼ä½ 48 ç代ç å·²ç»æé®é¢äºï¼åºè¯¥ä¿®æ£ä½ çç¨åºã 49 50 ç®èè¨ä¹ï¼8个å符ç缩è¿å¯ä»¥è®©ä»£ç æ´å®¹æé 读ï¼è¿æä¸ä¸ªå¥½å¤æ¯å½ä½ ç彿°åµå¥å¤ªæ·±ç 51 æ¶åå¯ä»¥ç»ä½ è¦åãçå¿è¿ä¸ªè¦åã 52 53 å¨switchè¯å¥ä¸æ¶é¤å¤çº§ç¼©è¿çé¦éçæ¹å¼æ¯è®©âswitchâåä»å±äºå®çâcaseâæ ç¾å¯¹é½äºå 54 ä¸åï¼èä¸è¦â两次缩è¿ââcaseâæ ç¾ãæ¯å¦ï¼ 55 56 switch (suffix) { 57 case 'G': 58 case 'g': 59 mem <<= 30; 60 break; 61 case 'M': 62 case 'm': 63 mem <<= 20; 64 break; 65 case 'K': 66 case 'k': 67 mem <<= 10; 68 /* fall through */ 69 default: 70 break; 71 } 72 73 74 ä¸è¦æå¤ä¸ªè¯å¥æ¾å¨ä¸è¡éï¼é¤éä½ æä»ä¹ä¸è¥¿è¦éèï¼ 75 76 if (condition) do_this; 77 do_something_everytime; 78 79 ä¹ä¸è¦å¨ä¸è¡éæ¾å¤ä¸ªèµå¼è¯å¥ãå æ ¸ä»£ç 飿 ¼è¶ 级ç®åãå°±æ¯é¿å å¯è½å¯¼è´å«äººè¯¯è¯»ç表 80 è¾¾å¼ã 81 82 é¤äºæ³¨éãææ¡£åKconfigä¹å¤ï¼ä¸è¦ä½¿ç¨ç©ºæ ¼æ¥ç¼©è¿ï¼åé¢çä¾åæ¯ä¾å¤ï¼æ¯ææä¸ºä¹ã 83 84 éç¨ä¸ä¸ªå¥½çç¼è¾å¨ï¼ä¸è¦å¨è¡å°¾çç©ºæ ¼ã 85 86 87 第äºç« ï¼æé¿çè¡ååç¬¦ä¸²ææ£ 88 89 代ç 飿 ¼çæä¹å°±å¨äºä½¿ç¨å¹³å¸¸ä½¿ç¨çå·¥å ·æ¥ç»´æä»£ç çå¯è¯»æ§åå¯ç»´æ¤æ§ã 90 91 æ¯ä¸è¡çé¿åº¦çéå¶æ¯80åï¼æä»¬å¼ºç建议æ¨éµå®è¿ä¸ªæ¯ä¾ã 92 93 é¿äº80åçè¯å¥è¦ææ£æææä¹ççæ®µãæ¯ä¸ªçæ®µè¦ææ¾çäºåæ¥çè¯å¥ï¼è䏿¾ç½®çä½ç½® 94 乿æ¾çé å³ãåæ ·çè§åä¹éç¨äºæå¾é¿åæ°å表ç彿°å¤´ãé¿å符串ä¹è¦ææ£æè¾çç 95 å符串ãå¯ä¸çä¾å¤æ¯è¶ è¿80åå¯ä»¥å¤§å¹ 度æé«å¯è¯»æ§å¹¶ä¸ä¸ä¼éèä¿¡æ¯çæ åµã 96 97 void fun(int a, int b, int c) 98 { 99 if (condition) 100 printk(KERN_WARNING "Warning this is a long printk with " 101 "3 parameters a: %u b: %u " 102 "c: %u \n", a, b, c); 103 else 104 next_statement; 105 } 106 107 第ä¸ç« ï¼å¤§æ¬å·åç©ºæ ¼çæ¾ç½® 108 109 Cè¯è¨é£æ ¼ä¸å¦å¤ä¸ä¸ªå¸¸è§é®é¢æ¯å¤§æ¬å·çæ¾ç½®ãå缩è¿å¤§å°ä¸åï¼éæ©æå¼ç¨æç§æ¾ç½®ç 110 ç¥å¹¶æ²¡æå¤å°ææ¯ä¸çåå ï¼ä¸è¿é¦éçæ¹å¼ï¼å°±åKernighanåRitchieå±ç¤ºç»æä»¬çï¼æ¯ 111 æèµ·å§å¤§æ¬å·æ¾å¨è¡å°¾ï¼èæç»æå¤§æ¬å·æ¾å¨è¡é¦ï¼æä»¥ï¼ 112 113 if (x is true) { 114 we do y 115 } 116 117 è¿éç¨äºææçé彿°è¯å¥åï¼ifãswitchãforãwhileãdoï¼ãæ¯å¦ï¼ 118 119 switch (action) { 120 case KOBJ_ADD: 121 return "add"; 122 case KOBJ_REMOVE: 123 return "remove"; 124 case KOBJ_CHANGE: 125 return "change"; 126 default: 127 return NULL; 128 } 129 130 ä¸è¿ï¼æä¸ä¸ªä¾å¤ï¼é£å°±æ¯å½æ°ï¼å½æ°çèµ·å§å¤§æ¬å·æ¾ç½®äºä¸ä¸è¡çå¼å¤´ï¼æä»¥ï¼ 131 132 int function(int x) 133 { 134 body of function 135 } 136 137 å ¨ä¸ççå¼ç«¯å¯è½ä¼æ±æ¨è¿ä¸ªä¸ä¸è´æ§æ¯â¦â¦åâ¦â¦ä¸ä¸è´çï¼ä¸è¿æææç»´å¥å ¨ç人é½ç¥éï¼ 138 aï¼K&Ræ¯_æ£ç¡®ç_ï¼å¹¶ä¸ï¼bï¼K&Ræ¯æ£ç¡®çãæ¤å¤ï¼ä¸ç®¡ææ ·å½æ°é½æ¯ç¹æ®çï¼å¨Cè¯è¨ä¸ 139 ï¼å½æ°æ¯ä¸è½åµå¥çï¼ã 140 141 注æç»æå¤§æ¬å·ç¬èªå æ®ä¸è¡ï¼é¤éå®åé¢è·çåä¸ä¸ªè¯å¥çå©ä½é¨åï¼ä¹å°±æ¯doè¯å¥ä¸ç 142 âwhileâæè ifè¯å¥ä¸çâelseâï¼åè¿æ ·ï¼ 143 144 do { 145 body of do-loop 146 } while (condition); 147 148 å 149 150 if (x == y) { 151 .. 152 } else if (x > y) { 153 ... 154 } else { 155 .... 156 } 157 158 çç±ï¼K&Rã 159 160 ä¹è¯·æ³¨æè¿ç§å¤§æ¬å·çæ¾ç½®æ¹å¼ä¹è½ä½¿ç©ºï¼æè å·®ä¸å¤ç©ºçï¼è¡çæ°éæå°åï¼åæ¶ä¸å¤±å¯ 161 读æ§ãå æ¤ï¼ç±äºä½ çå±å¹ä¸çæ°è¡æ¯ä¸å¯åçèµæºï¼æ³æ³25è¡çç»ç«¯å±å¹ï¼ï¼ä½ å°ä¼ææ´ 162 å¤çç©ºè¡æ¥æ¾ç½®æ³¨éã 163 164 å½åªæä¸ä¸ªåç¬çè¯å¥çæ¶åï¼ä¸ç¨å ä¸å¿ è¦ç大æ¬å·ã 165 166 if (condition) 167 action(); 168 169 è¿ç¹ä¸éç¨äºæ¬èº«ä¸ºæä¸ªæ¡ä»¶è¯å¥çä¸ä¸ªåæ¯çåç¬è¯å¥ãè¿æ¶éè¦å¨ä¸¤ä¸ªåæ¯éé½ä½¿ç¨å¤§ 170 æ¬å·ã 171 172 if (condition) { 173 do_this(); 174 do_that(); 175 } else { 176 otherwise(); 177 } 178 179 3.1ï¼ç©ºæ ¼ 180 181 Linuxå æ ¸çç©ºæ ¼ä½¿ç¨æ¹å¼ï¼ä¸»è¦ï¼åå³äºå®æ¯ç¨äºå½æ°è¿æ¯å ³é®åãï¼å¤§å¤æ°ï¼å ³é®åå 182 è¦å ä¸ä¸ªç©ºæ ¼ãå¼å¾æ³¨æçä¾å¤æ¯sizeofãtypeofãalignofå__attribute__ï¼è¿äºå ³é®å 183 æäºç¨åº¦ä¸çèµ·æ¥æ´å彿°ï¼å®ä»¬å¨Linuxéä¹å¸¸å¸¸ä¼´éå°æ¬å·è使ç¨ï¼å°½ç®¡å¨Cè¯è¨éè¿æ · 184 çå°æ¬å·ä¸æ¯å¿ éçï¼å°±åâstruct fileinfo infoâ声æè¿åçâsizeof infoâï¼ã 185 186 æä»¥å¨è¿äºå ³é®åä¹åæ¾ä¸ä¸ªç©ºæ ¼ï¼ 187 if, switch, case, for, do, while 188 使¯ä¸è¦å¨sizeofãtypeofãalignofæè __attribute__è¿äºå ³é®åä¹åæ¾ç©ºæ ¼ãä¾å¦ï¼ 189 s = sizeof(struct file); 190 191 ä¸è¦å¨å°æ¬å·éç表达å¼ä¸¤ä¾§å ç©ºæ ¼ãè¿æ¯ä¸ä¸ªåä¾ï¼ 192 193 s = sizeof( struct file ); 194 195 å½å£°ææéç±»åæè è¿åæéç±»åç彿°æ¶ï¼â*âçé¦éä½¿ç¨æ¹å¼æ¯ä½¿ä¹é è¿åéåæè å½ 196 æ°åï¼è䏿¯é è¿ç±»ååãä¾åï¼ 197 198 char *linux_banner; 199 unsigned long long memparse(char *ptr, char **retptr); 200 char *match_strdup(substring_t *s); 201 202 å¨å¤§å¤æ°äºå åä¸å æä½ç¬¦ä¸¤ä¾§ä½¿ç¨ä¸ä¸ªç©ºæ ¼ï¼ä¾å¦ä¸é¢ææè¿äºæä½ç¬¦ï¼ 203 204 = + - < > * / % | & ^ <= >= == != ? : 205 206 使¯ä¸å æä½ç¬¦åä¸è¦å ç©ºæ ¼ï¼ 207 & * + - ~ ! sizeof typeof alignof __attribute__ defined 208 209 åç¼èªå åèªåä¸å æä½ç¬¦åä¸å ç©ºæ ¼ï¼ 210 ++ -- 211 212 åç¼èªå åèªåä¸å æä½ç¬¦åä¸å ç©ºæ ¼ï¼ 213 ++ -- 214 215 â.âåâ->âç»æä½æåæä½ç¬¦ååä¸å ç©ºæ ¼ã 216 217 ä¸è¦å¨è¡å°¾ç空ç½ãæäºå¯ä»¥èªå¨ç¼©è¿çç¼è¾å¨ä¼å¨æ°è¡çè¡é¦å å ¥ééç空ç½ï¼ç¶åä½ 218 å°±å¯ä»¥ç´æ¥å¨é£ä¸è¡è¾å ¥ä»£ç ãä¸è¿åå¦ä½ æå没æå¨é£ä¸è¡è¾å ¥ä»£ç ï¼æäºç¼è¾å¨å°±ä¸ 219 ä¼ç§»é¤å·²ç»å å ¥ç空ç½ï¼å°±åä½ æ æçä¸ä¸ä¸ªåªæç©ºç½çè¡ãå å«è¡å°¾ç©ºç½çè¡å°±è¿æ ·äº§ 220 çäºã 221 222 å½gitåç°è¡¥ä¸å å«äºè¡å°¾ç©ºç½çæ¶åä¼è¦åä½ ï¼å¹¶ä¸å¯ä»¥åºä½ çè¦æ±å»æè¡å°¾ç©ºç½ï¼ä¸è¿ 223 å¦æä½ æ¯æ£å¨æä¸ç³»åè¡¥ä¸ï¼è¿æ ·åä¼å¯¼è´åé¢çè¡¥ä¸å¤±è´¥ï¼å ä¸ºä½ æ¹åäºè¡¥ä¸çä¸ä¸æã 224 225 226 第åç« ï¼å½å 227 228 Cæ¯ä¸ä¸ªç®æ´çè¯è¨ï¼ä½ çå½åä¹åºè¯¥è¿æ ·ãåModula-2åPascalç¨åºåä¸åï¼Cç¨åºåä¸ä½¿ 229 ç¨ç±»ä¼¼ThisVariableIsATemporaryCounterè¿æ ·å丽çååãCç¨åºåä¼ç§°é£ä¸ªåé为âtmpâ 230 ï¼è¿æ ·åèµ·æ¥ä¼æ´å®¹æï¼èä¸è³å°ä¸ä¼ä»¤å ¶é¾äºçè§£ã 231 232 ä¸è¿ï¼è½ç¶æ··ç¨å¤§å°åçå忝䏿å¡ä½¿ç¨çï¼ä½æ¯å ¨å±åéè¿æ¯éè¦ä¸ä¸ªå ·æè¿°æ§çåå 233 ãç§°ä¸ä¸ªå ¨å±å½æ°ä¸ºâfooâæ¯ä¸ä¸ªé¾ä»¥é¥¶æçé误ã 234 235 å ¨å±åéï¼åªæå½ä½ çæ£éè¦å®ä»¬çæ¶ååç¨å®ï¼éè¦æä¸ä¸ªå ·æè¿°æ§çååï¼å°±åå ¨å±å½ 236 æ°ãå¦æä½ æä¸ä¸ªå¯ä»¥è®¡ç®æ´»å¨ç¨æ·æ°éç彿°ï¼ä½ åºè¯¥å«å®âcount_active_users()âæè 237 类似çååï¼ä½ ä¸åºè¯¥å«å®âcntuser()âã 238 239 å¨å½æ°åä¸å å«å½æ°ç±»åï¼æè°çåçå©å½åæ³ï¼æ¯èååºäºé®é¢ââç¼è¯å¨ç¥éé£äºç±»åè 240 ä¸è½å¤æ£æ¥é£äºç±»åï¼è¿æ ·ååªè½æç¨åºåå¼ç³æ¶äºã龿ªå¾®è½¯æ»æ¯å¶é åºæé®é¢çç¨åºã 241 242 æ¬å°åéååºè¯¥ç®çï¼èä¸è½å¤è¡¨è¾¾ç¸å ³çå«ä¹ãå¦æä½ æä¸äºéæºçæ´æ°åç循ç¯è®¡æ°å¨ 243 ï¼å®åºè¯¥è¢«ç§°ä¸ºâiâãå«å®âloop_counterâå¹¶æ çå¤ï¼å¦æå®æ²¡æè¢«è¯¯è§£çå¯è½çè¯ã类似 244 çï¼âtmpâå¯ä»¥ç¨æ¥ç§°å¼ä»»æç±»åç临æ¶åéã 245 246 å¦æä½ ææ··æ·äºä½ çæ¬å°åéåï¼ä½ å°±éå°å¦ä¸ä¸ªé®é¢äºï¼å«å彿°å¢é¿è·å°è失衡综åç 247 ã请ç第å ç« ï¼å½æ°ï¼ã 248 249 250 第äºç« ï¼Typedef 251 252 ä¸è¦ä½¿ç¨ç±»ä¼¼âvps_tâä¹ç±»çä¸è¥¿ã 253 254 å¯¹ç»æä½åæé使ç¨typedefæ¯ä¸ä¸ªé误ãå½ä½ å¨ä»£ç éçå°ï¼ 255 256 vps_t a; 257 258 è¿ä»£è¡¨ä»ä¹ææå¢ï¼ 259 260 ç¸åï¼å¦ææ¯è¿æ · 261 262 struct virtual_container *a; 263 264 ä½ å°±ç¥éâaâæ¯ä»ä¹äºã 265 266 å¾å¤äººè®¤ä¸ºtypedefâè½æé«å¯è¯»æ§âãå®é 䏿¯è¿æ ·çãå®ä»¬åªå¨ä¸åæ åµä¸æç¨ï¼ 267 268 (a) å®å ¨ä¸éæç对象ï¼è¿ç§æ åµä¸è¦ä¸»å¨ä½¿ç¨typedefæ¥éèè¿ä¸ªå¯¹è±¡å®é 䏿¯ä»ä¹ï¼ã 269 270 ä¾å¦ï¼âpte_tâçä¸éæå¯¹è±¡ï¼ä½ åªè½ç¨åéç访é®å½æ°æ¥è®¿é®å®ä»¬ã 271 272 注æï¼ä¸éææ§åâ访é®å½æ°âæ¬èº«æ¯ä¸å¥½çãæä»¬ä½¿ç¨pte_tçç±»åçåå å¨äºççæ¯ 273 å®å ¨æ²¡æä»»ä½å ±ç¨çå¯è®¿é®ä¿¡æ¯ã 274 275 (b) æ¸ æ¥çæ´æ°ç±»åï¼å¦æ¤ï¼è¿å±æ½è±¡å°±å¯ä»¥å¸®å©æ¶é¤å°åºæ¯âintâè¿æ¯âlongâçæ··æ·ã 276 277 u8/u16/u32æ¯å®å ¨æ²¡æé®é¢çtypedefï¼ä¸è¿å®ä»¬æ´ç¬¦åç±»å«(d)è䏿¯è¿éã 278 279 忬¡æ³¨æï¼è¦è¿æ ·åï¼å¿ é¡»äºåºæå ã妿æä¸ªå鿝âunsigned longâï¼é£ä¹æ²¡æå¿ è¦ 280 281 typedef unsigned long myflags_t; 282 283 ä¸è¿å¦ææä¸ä¸ªæç¡®çåå ï¼æ¯å¦å®å¨æç§æ åµä¸å¯è½ä¼æ¯ä¸ä¸ªâunsigned intâèå¨ 284 å ¶ä»æ åµä¸å¯è½ä¸ºâunsigned longâï¼é£ä¹å°±ä¸è¦ç¹è±«ï¼è¯·å¡å¿ 使ç¨typedefã 285 286 (c) å½ä½ 使ç¨sparseæåé¢çå建ä¸ä¸ªæ°ç±»åæ¥åç±»åæ£æ¥çæ¶åã 287 288 (d) åæ åC99ç±»åç¸åçç±»åï¼å¨æäºä¾å¤çæ åµä¸ã 289 290 è½ç¶è®©ç¼çåèçæ¥éåºæ°çæ åç±»åæ¯å¦âuint32_tâä¸éè¦è±å¾å¤æ¶é´ï¼å¯æ¯æäº 291 人ä»ç¶æç»ä½¿ç¨å®ä»¬ã 292 293 å æ¤ï¼Linuxç¹æççåäºæ åç±»åçâu8/u16/u32/u64âç±»ååå®ä»¬çæç¬¦å·ç±»åæ¯è¢« 294 å 许çââ尽管å¨ä½ èªå·±çæ°ä»£ç ä¸ï¼å®ä»¬ä¸æ¯å¼ºå¶è¦æ±è¦ä½¿ç¨çã 295 296 å½ç¼è¾å·²ç»ä½¿ç¨äºæä¸ªç±»åéçå·²æä»£ç æ¶ï¼ä½ åºè¯¥éµå¾ªé£äºä»£ç ä¸å·²ç»ååºçéæ©ã 297 298 (e) å¯ä»¥å¨ç¨æ·ç©ºé´å®å ¨ä½¿ç¨çç±»åã 299 300 卿äºç¨æ·ç©ºé´å¯è§çç»æä½éï¼æä»¬ä¸è½è¦æ±C99ç±»åèä¸ä¸è½ç¨ä¸é¢æå°çâu32â 301 ç±»åãå æ¤ï¼æä»¬å¨ä¸ç¨æ·ç©ºé´å ±äº«çææç»æä½ä¸ä½¿ç¨__u32å类似çç±»åã 302 303 å¯è½è¿æå ¶ä»çæ åµï¼ä¸è¿åºæ¬çè§åæ¯æ°¸è¿ä¸è¦ä½¿ç¨typedefï¼é¤éä½ å¯ä»¥æç¡®çåºç¨ä¸ 304 è¿°æä¸ªè§åä¸çä¸ä¸ªã 305 306 æ»çæ¥è¯´ï¼å¦æä¸ä¸ªæéæè ä¸ä¸ªç»æä½éçå ç´ å¯ä»¥åççè¢«ç´æ¥è®¿é®å°ï¼é£ä¹å®ä»¬å°±ä¸ 307 åºè¯¥æ¯ä¸ä¸ªtypedefã 308 309 310 第å ç« ï¼å½æ° 311 312 彿°åºè¯¥ç®çèæ¼äº®ï¼å¹¶ä¸åªå®æä¸ä»¶äºæ ã彿°åºè¯¥å¯ä»¥ä¸å±æè 䏤屿¾ç¤ºå®ï¼æä»¬é½ç¥ 313 éISO/ANSIå±å¹å¤§å°æ¯80x24ï¼ï¼åªåä¸ä»¶äºæ ï¼è䏿å®å好ã 314 315 ä¸ä¸ªå½æ°çæå¤§é¿åº¦æ¯åè¯¥å½æ°çå¤æåº¦å缩è¿çº§æ°æåæ¯çãæä»¥ï¼å¦æä½ æä¸ä¸ªçè®ºä¸ 316 å¾ç®åçåªæä¸ä¸ªå¾é¿ï¼ä½æ¯ç®åï¼çcaseè¯å¥ç彿°ï¼èä¸ä½ éè¦å¨æ¯ä¸ªcaseéåå¾å¤å¾ 317 å°çäºæ ï¼è¿æ ·ç彿°å°½ç®¡å¾é¿ï¼ä½ä¹æ¯å¯ä»¥çã 318 319 ä¸è¿ï¼å¦æä½ æä¸ä¸ªå¤æç彿°ï¼èä¸ä½ æçä¸ä¸ªå¤©å䏿¯å¾é«çé«ä¸ä¸å¹´çº§å¦çå¯è½çè³ 320 æä¸æ¸ æ¥è¿ä¸ªå½æ°çç®çï¼ä½ åºè¯¥ä¸¥æ ¼çéµå®å颿å°çé¿åº¦éå¶ã使ç¨è¾ å©å½æ°ï¼å¹¶ä¸ºä¹ 321 åä¸ªå ·æè¿°æ§çååï¼å¦æä½ è§å¾å®ä»¬çæ§è½å¾éè¦çè¯ï¼å¯ä»¥è®©ç¼è¯å¨å èå®ä»¬ï¼è¿æ ·ç 322 ææå¾å¾ä¼æ¯ä½ åä¸ä¸ªå¤æå½æ°çææè¦å¥½ãï¼ 323 324 彿°çå¦å¤ä¸ä¸ªè¡¡éæ 忝æ¬å°åéçæ°éãæ¤æ°éä¸åºè¶ è¿5ï¼10个ï¼å¦åä½ ç彿°å°±æ 325 é®é¢äºãéæ°èèä¸ä¸ä½ ç彿°ï¼æå®åæææ´å°ç彿°ã人ç大èä¸è¬å¯ä»¥è½»æ¾çåæ¶è· 326 踪7个ä¸åçäºç©ï¼å¦æåå¢å¤çè¯ï¼å°±ä¼ç³æ¶äºãå³ä¾¿ä½ èªé¢è¿äººï¼ä½ ä¹å¯è½ä¼è®°ä¸æ¸ ä½ 2 327 个ææååè¿çäºæ ã 328 329 卿ºæä»¶éï¼ä½¿ç¨ç©ºè¡éå¼ä¸åç彿°ãå¦æè¯¥å½æ°éè¦è¢«å¯¼åºï¼å®çEXPORT*å®åºè¯¥ç´§è´´ 330 å¨å®çç»æå¤§æ¬å·ä¹ä¸ãæ¯å¦ï¼ 331 332 int system_is_up(void) 333 { 334 return system_state == SYSTEM_RUNNING; 335 } 336 EXPORT_SYMBOL(system_is_up); 337 338 å¨å½æ°ååä¸ï¼å å«å½æ°ååå®ä»¬çæ°æ®ç±»åãè½ç¶Cè¯è¨é没æè¿æ ·çè¦æ±ï¼å¨Linuxéè¿ 339 æ¯æå¡çåæ³ï¼å ä¸ºè¿æ ·å¯ä»¥å¾ç®åçç»è¯»è æä¾æ´å¤çæä»·å¼çä¿¡æ¯ã 340 341 342 第ä¸ç« ï¼éä¸ç彿°éåºéå¾ 343 344 è½ç¶è¢«æäºäººå£°ç§°å·²ç»è¿æ¶ï¼ä½æ¯gotoè¯å¥ççä»·ç©è¿æ¯ç»å¸¸è¢«ç¼è¯å¨æä½¿ç¨ï¼å ·ä½å½¢å¼æ¯ 345 æ æ¡ä»¶è·³è½¬æä»¤ã 346 347 å½ä¸ä¸ªå½æ°ä»å¤ä¸ªä½ç½®éåºå¹¶ä¸éè¦åä¸äºéç¨çæ¸ çå·¥ä½çæ¶åï¼gotoç好å¤å°±æ¾ç°åºæ¥ 348 äºã 349 350 çç±æ¯ï¼ 351 352 - æ æ¡ä»¶è¯å¥å®¹æçè§£åè·è¸ª 353 - åµå¥ç¨åº¦åå° 354 - å¯ä»¥é¿å ç±äºä¿®æ¹æ¶å¿è®°æ´æ°æä¸ªåç¬çéåºç¹è导è´çé误 355 - åè½»äºç¼è¯å¨çå·¥ä½ï¼æ éå é¤åä½ä»£ç ;) 356 357 int fun(int a) 358 { 359 int result = 0; 360 char *buffer = kmalloc(SIZE); 361 362 if (buffer == NULL) 363 return -ENOMEM; 364 365 if (condition1) { 366 while (loop1) { 367 ... 368 } 369 result = 1; 370 goto out; 371 } 372 ... 373 out: 374 kfree(buffer); 375 return result; 376 } 377 378 ç¬¬å «ç« ï¼æ³¨é 379 380 æ³¨éæ¯å¥½çï¼ä¸è¿æè¿åº¦æ³¨éçå±é©ãæ°¸è¿ä¸è¦å¨æ³¨ééè§£éä½ çä»£ç æ¯å¦ä½è¿ä½çï¼æ´å¥½ 381 çåæ³æ¯è®©å«äººä¸çä½ ç代ç å°±å¯ä»¥æç½ï¼è§£éåçå¾å·®çä»£ç æ¯æµªè´¹æ¶é´ã 382 383 ä¸è¬çï¼ä½ æ³è¦ä½ çæ³¨éåè¯å«äººä½ ç代ç åäºä»ä¹ï¼è䏿¯æä¹åçãä¹è¯·ä½ ä¸è¦ææ³¨é 384 æ¾å¨ä¸ä¸ªå½æ°ä½å é¨ï¼å¦æå½æ°å¤æå°ä½ éè¦ç¬ç«ç注éå ¶ä¸çä¸é¨åï¼ä½ å¾å¯è½éè¦åå° 385 第å ç« çä¸çãä½ å¯ä»¥åä¸äºå°æ³¨éæ¥æ³¨ææè¦åæäºå¾èªæï¼æè æ§½ç³ï¼çåæ³ï¼ä½ä¸è¦ 386 å 太å¤ãä½ åºè¯¥åçï¼æ¯ææ³¨éæ¾å¨å½æ°ç头é¨ï¼åè¯äººä»¬å®åäºä»ä¹ï¼ä¹å¯ä»¥å ä¸å®åè¿ 387 äºäºæ çåå ã 388 389 彿³¨éå æ ¸API彿°æ¶ï¼è¯·ä½¿ç¨kernel-docæ ¼å¼ã请ç 390 Documentation/kernel-doc-nano-HOWTO.txtåscripts/kernel-doc以è·å¾è¯¦ç»ä¿¡æ¯ã 391 392 Linuxçæ³¨é飿 ¼æ¯C89â/* ... */â飿 ¼ãä¸è¦ä½¿ç¨C99飿 ¼â// ...âæ³¨éã 393 394 é¿ï¼å¤è¡ï¼çé¦é注é飿 ¼æ¯ï¼ 395 396 /* 397 * This is the preferred style for multi-line 398 * comments in the Linux kernel source code. 399 * Please use it consistently. 400 * 401 * Description: A column of asterisks on the left side, 402 * with beginning and ending almost-blank lines. 403 */ 404 405 æ³¨éæ°æ®ä¹æ¯å¾éè¦çï¼ä¸ç®¡æ¯åºæ¬ç±»åè¿æ¯è¡çç±»åãä¸ºäºæ¹ä¾¿å®ç°è¿ä¸ç¹ï¼æ¯ä¸è¡åºåª 406 声æä¸ä¸ªæ°æ®ï¼ä¸è¦ä½¿ç¨éå·æ¥ä¸æ¬¡å£°æå¤ä¸ªæ°æ®ï¼ãè¿æ ·ä½ å°±æç©ºé´æ¥ä¸ºæ¯ä¸ªæ°æ®å䏿®µ 407 å°æ³¨éæ¥è§£éå®ä»¬çç¨éäºã 408 409 410 第ä¹ç« ï¼ä½ å·²ç»æäºæ å¼ç³äº 411 412 è¿æ²¡ä»ä¹ï¼æä»¬é½æ¯è¿æ ·ãå¯è½ä½ ç使ç¨äºå¾é¿æ¶é´Unixçæåå·²ç»åè¯ä½ âGNU emacsâè½ 413 èªå¨å¸®ä½ æ ¼å¼åCæºä»£ç ï¼èä¸ä½ 乿³¨æå°äºï¼ç¡®å®æ¯è¿æ ·ï¼ä¸è¿å®æä½¿ç¨çé»è®¤å¼åæä»¬ 414 æ³è¦çç¸å»çè¿ï¼å®é ä¸ï¼çè³æ¯éæºæçè¿è¦å·®ââæ æ°ä¸ªç´åå¨GNU emacséæåæ°¸è¿ä¸ 415 ä¼åé åºä¸ä¸ªå¥½ç¨åºï¼ï¼è¯æ³¨ï¼è¯·åèInfinite Monkey Theoremï¼ 416 417 æä»¥ä½ è¦ä¹æ¾å¼GNU emacsï¼è¦ä¹æ¹åå®è®©å®ä½¿ç¨æ´åçç设å®ãè¦éç¨åä¸ä¸ªæ¹æ¡ï¼ä½ å¯ 418 以æä¸é¢è¿æ®µç²è´´å°ä½ ç.emacsæä»¶éã 419 420 (defun linux-c-mode () 421 "C mode with adjusted defaults for use with the Linux kernel." 422 (interactive) 423 (c-mode) 424 (c-set-style "K&R") 425 (setq tab-width 8) 426 (setq indent-tabs-mode t) 427 (setq c-basic-offset 8)) 428 429 è¿æ ·å°±å®ä¹äºM-x linux-c-modeå½ä»¤ãå½ä½ hackä¸ä¸ªæ¨¡åçæ¶åï¼å¦æä½ æå符串 430 -*- linux-c -*-æ¾å¨å¤´ä¸¤è¡çæä¸ªä½ç½®ï¼è¿ä¸ªæ¨¡å¼å°ä¼è¢«èªå¨è°ç¨ãå¦æä½ å¸æå¨ä½ ä¿®æ¹ 431 /usr/src/linuxéçæä»¶æ¶éæ¯è¬èªå¨æå¼linux-c-modeçè¯ï¼ä½ ä¹å¯è½éè¦æ·»å 432 433 (setq auto-mode-alist (cons '("/usr/src/linux.*/.*\\.[ch]$" . linux-c-mode) 434 auto-mode-alist)) 435 436 å°ä½ ç.emacsæä»¶éã 437 438 ä¸è¿å°±ç®ä½ å°è¯è®©emacsæ£ç¡®çæ ¼å¼å代ç 失败äºï¼ä¹å¹¶ä¸æå³çä½ å¤±å»äºä¸åï¼è¿å¯ä»¥ç¨â 439 indentâã 440 441 ä¸è¿ï¼GNU indent乿åGNU emacs䏿 ·æé®é¢ç设å®ï¼æä»¥ä½ éè¦ç»å®ä¸äºå½ä»¤é项ãä¸ 442 è¿ï¼è¿è¿ä¸ç®å¤ªç³ç³ï¼å ä¸ºå°±ç®æ¯GNU indentçä½è ä¹è®¤åK&Rçæå¨æ§ï¼GNUçäººå¹¶ä¸æ¯å 443 人ï¼ä»ä»¬åªæ¯å¨è¿ä¸ªé®é¢ä¸è¢«ä¸¥éç误导äºï¼ï¼æä»¥ä½ åªè¦ç»indentæå®é项â-kr -i8â 444 ï¼ä»£è¡¨âK&Rï¼8个å符缩è¿âï¼ï¼æè 使ç¨âscripts/Lindentâï¼è¿æ ·å°±å¯ä»¥ä»¥ææ¶é«¦çæ¹å¼ 445 ç¼©è¿æºä»£ç ã 446 447 âindentâæå¾å¤é项ï¼ç¹å«æ¯éæ°æ ¼å¼å注éçæ¶åï¼ä½ å¯è½éè¦çä¸ä¸å®çæå页ãä¸è¿ 448 è®°ä½ï¼âindentâä¸è½ä¿®æ£åçç¼ç¨ä¹ æ¯ã 449 450 451 第åç« ï¼Kconfigé ç½®æä»¶ 452 453 对äºé叿ºç æ çææKconfig*é ç½®æä»¶æ¥è¯´ï¼å®ä»¬ç¼©è¿æ¹å¼ä¸C代ç ç¸æ¯ææä¸åãç´§æ¨ 454 å¨âconfigâå®ä¹ä¸é¢çè¡ç¼©è¿ä¸ä¸ªå¶è¡¨ç¬¦ï¼å¸®å©ä¿¡æ¯ååå¤ç¼©è¿2ä¸ªç©ºæ ¼ãæ¯å¦ï¼ 455 456 config AUDIT 457 bool "Auditing support" 458 depends on NET 459 help 460 Enable auditing infrastructure that can be used with another 461 kernel subsystem, such as SELinux (which requires this for 462 logging of avc messages output). Does not do system-call 463 auditing without CONFIG_AUDITSYSCALL. 464 465 èé£äºå±é©çåè½ï¼æ¯å¦æäºæä»¶ç³»ç»ç忝æï¼åºè¯¥å¨å®ä»¬çæç¤ºåç¬¦ä¸²éæ¾èç声æè¿ 466 ä¸ç¹ï¼ 467 468 config ADFS_FS_RW 469 bool "ADFS write support (DANGEROUS)" 470 depends on ADFS_FS 471 ... 472 473 è¦æ¥çé ç½®æä»¶ç宿´ææ¡£ï¼è¯·çDocumentation/kbuild/kconfig-language.txtã 474 475 476 第åä¸ç« ï¼æ°æ®ç»æ 477 478 妿ä¸ä¸ªæ°æ®ç»æï¼å¨å建å鿝å®çå线æ§è¡ç¯å¢ä¹å¤å¯è§ï¼é£ä¹å®å¿ é¡»è¦æä¸ä¸ªå¼ç¨è®¡ 479 æ°å¨ãå æ ¸é没æå徿¶éï¼å¹¶ä¸å æ ¸ä¹å¤çå徿¶éæ ¢ä¸æçä½ä¸ï¼ï¼è¿æå³çä½ ç»å¯¹é 480 è¦è®°å½ä½ 对è¿ç§æ°æ®ç»æçä½¿ç¨æ åµã 481 482 å¼ç¨è®¡æ°æå³çä½ è½å¤é¿å ä¸éï¼å¹¶ä¸å 许å¤ä¸ªç¨æ·å¹¶è¡è®¿é®è¿ä¸ªæ°æ®ç»æââèä¸éè¦æ å¿ 483 è¿ä¸ªæ°æ®ç»æä» ä» å ä¸ºææ¶ä¸è¢«ä½¿ç¨å°±æ¶å¤±äºï¼é£äºç¨æ·å¯è½ä¸è¿æ¯æ²ç¡äºä¸éµæè åäºä¸ 484 äºå ¶ä»äºæ èå·²ã 485 486 注æä¸éä¸è½å代å¼ç¨è®¡æ°ãä¸éæ¯ä¸ºäºä¿ææ°æ®ç»æçä¸è´æ§ï¼èå¼ç¨è®¡æ°æ¯ä¸ä¸ªå å管 487 çæå·§ãé常äºè é½éè¦ï¼ä¸è¦æä¸¤ä¸ªææ··äºã 488 489 å¾å¤æ°æ®ç»æå®é 䏿2级å¼ç¨è®¡æ°ï¼å®ä»¬é常æä¸åâç±»âçç¨æ·ãå类计æ°å¨ç»è®¡åç±»ç¨ 490 æ·çæ°éï¼æ¯å½å类计æ°å¨åè³é¶æ¶ï¼å ¨å±è®¡æ°å¨åä¸ã 491 492 è¿ç§âå¤çº§å¼ç¨è®¡æ°âçä¾åå¯ä»¥å¨å å管çï¼âstruct mm_structâï¼mm_usersåmm_countï¼ 493 åæä»¶ç³»ç»ï¼âstruct super_blockâï¼s_countås_activeï¼ä¸æ¾å°ã 494 495 è®°ä½ï¼å¦æå¦ä¸ä¸ªæ§è¡çº¿ç´¢å¯ä»¥æ¾å°ä½ çæ°æ®ç»æï¼ä½æ¯è¿ä¸ªæ°æ®ç»ææ²¡æå¼ç¨è®¡æ°å¨ï¼è¿ 496 éå ä¹è¯å®æ¯ä¸ä¸ªbugã 497 498 499 第åäºç« ï¼å®ï¼æä¸¾åRTL 500 501 ç¨äºå®ä¹å¸¸éçå®çåååæä¸¾éçæ ç¾éè¦å¤§åã 502 503 #define CONSTANT 0x12345 504 505 å¨å®ä¹å 个ç¸å ³çå¸¸éæ¶ï¼æå¥½ç¨æä¸¾ã 506 507 å®çåå请ç¨å¤§å忝ï¼ä¸è¿å½¢å¦å½æ°çå®çååå¯ä»¥ç¨å°å忝ã 508 509 ä¸è¬çï¼å¦æè½åæå è彿°å°±ä¸è¦åæå彿°çå®ã 510 511 嫿å¤ä¸ªè¯å¥çå®åºè¯¥è¢«å å«å¨ä¸ä¸ªdo-while代ç åéï¼ 512 513 #define macrofun(a, b, c) \ 514 do { \ 515 if (a == 5) \ 516 do_this(b, c); \ 517 } while (0) 518 519 使ç¨å®çæ¶ååºé¿å çäºæ ï¼ 520 521 1) 影忧嶿µç¨çå®ï¼ 522 523 #define FOO(x) \ 524 do { \ 525 if (blah(x) < 0) \ 526 return -EBUGGERED; \ 527 } while(0) 528 529 é常ä¸å¥½ãå®çèµ·æ¥åä¸ä¸ªå½æ°ï¼ä¸è¿å´è½å¯¼è´âè°ç¨âå®ç彿°éåºï¼ä¸è¦æä¹±è¯»è 大èé 530 çè¯æ³åæå¨ã 531 532 2) ä¾èµäºä¸ä¸ªåºå®ååçæ¬å°åéçå®ï¼ 533 534 #define FOO(val) bar(index, val) 535 536 å¯è½çèµ·æ¥åæ¯ä¸ªä¸éçä¸è¥¿ï¼ä¸è¿å®é常容ææè¯»ä»£ç ç人æç³æ¶ï¼èä¸å®¹æå¯¼è´çèµ·æ¥ 537 ä¸ç¸å ³çæ¹å¨å¸¦æ¥é误ã 538 539 3) ä½ä¸ºå·¦å¼ç另忰çå®ï¼ FOO(x) = yï¼å¦ææäººæFOOåæä¸ä¸ªå è彿°çè¯ï¼è¿ç§ç¨ 540 æ³å°±ä¼åºéäºã 541 542 4) å¿è®°äºä¼å 级ï¼ä½¿ç¨è¡¨è¾¾å¼å®ä¹å¸¸éçå®å¿ é¡»å°è¡¨è¾¾å¼ç½®äºä¸å¯¹å°æ¬å·ä¹å ã另忰ç 543 å®ä¹è¦æ³¨ææ¤ç±»é®é¢ã 544 545 #define CONSTANT 0x4000 546 #define CONSTEXP (CONSTANT | 3) 547 548 cppæå对å®ç讲解å¾è¯¦ç»ãGcc internalsæåä¹è¯¦ç»è®²è§£äºRTLï¼è¯æ³¨ï¼register 549 transfer languageï¼ï¼å æ ¸éçæ±ç¼è¯è¨ç»å¸¸ç¨å°å®ã 550 551 552 第åä¸ç« ï¼æå°å æ ¸æ¶æ¯ 553 554 å æ ¸å¼åè åºè¯¥æ¯åè¿è¯å¥½æè²çã请ä¸å®æ³¨æå æ ¸ä¿¡æ¯çæ¼åï¼ä»¥ç»äººä»¥å¥½çå°è±¡ãä¸è¦ 555 ç¨ä¸è§èçåè¯æ¯å¦âdontâï¼èè¦ç¨âdo notâæè âdon'tâãä¿è¯è¿äºä¿¡æ¯ç®åãæäºãæ 556 æ§ä¹ã 557 558 å æ ¸ä¿¡æ¯ä¸å¿ 以å¥å·ï¼è¯æ³¨ï¼è±æå¥å·ï¼å³ç¹ï¼ç»æã 559 560 å¨å°æ¬å·éæå°æ°å(%d)没æä»»ä½ä»·å¼ï¼åºè¯¥é¿å è¿æ ·åã 561 562 <linux/device.h>éæä¸äºé©±å¨æ¨¡åè¯æå®ï¼ä½ åºè¯¥ä½¿ç¨å®ä»¬ï¼ä»¥ç¡®ä¿ä¿¡æ¯å¯¹åºäºæ£ç¡®ç 563 设å¤å驱å¨ï¼å¹¶ä¸è¢«æ è®°äºæ£ç¡®çæ¶æ¯çº§å«ãè¿äºå®æï¼dev_err(), dev_warn(), 564 dev_info()ççã对äºé£äºä¸åæä¸ªç¹å®è®¾å¤ç¸å ³è¿çä¿¡æ¯ï¼<linux/kernel.h>å®ä¹äº 565 pr_debug()åpr_info()ã 566 567 ååºå¥½çè°è¯ä¿¡æ¯å¯ä»¥æ¯ä¸ä¸ªå¾å¤§çææï¼å½ä½ ååºæ¥ä¹åï¼è¿äºä¿¡æ¯å¨è¿ç¨é¤éçæ¶å 568 å°±ä¼æä¸ºæå¤§ç帮å©ãå½DEBUGç¬¦å·æ²¡æè¢«å®ä¹çæ¶åï¼è¿äºä¿¡æ¯ä¸åºè¯¥è¢«ç¼è¯è¿å æ ¸é 569 ï¼ä¹å°±æ¯è¯´ï¼é»è®¤å°ï¼å®ä»¬ä¸åºè¯¥è¢«å å«å¨å ï¼ãå¦æä½ ä½¿ç¨dev_dbg()æè pr_debug()ï¼ 570 å°±è½èªå¨è¾¾å°è¿ä¸ªææãå¾å¤åç³»ç»æ¥æKconfigé项æ¥å¯ç¨-DDEBUGãè¿æä¸ä¸ªç¸å ³çæ¯ä¾ 571 æ¯ä½¿ç¨VERBOSE_DEBUGæ¥æ·»å dev_vdbg()æ¶æ¯å°é£äºå·²ç»ç±DEBUGå¯ç¨çæ¶æ¯ä¹ä¸ã 572 573 574 第ååç« ï¼åé å å 575 576 å æ ¸æä¾äºä¸é¢çä¸è¬ç¨éçå ååé 彿°ï¼kmalloc()ï¼kzalloc()ï¼kcalloc()å 577 vmalloc()ã请åèAPIææ¡£ä»¥è·åæå ³å®ä»¬ç详ç»ä¿¡æ¯ã 578 579 ä¼ éç»æä½å¤§å°çé¦é形弿¯è¿æ ·çï¼ 580 581 p = kmalloc(sizeof(*p), ...); 582 583 å¦å¤ä¸ç§ä¼ éæ¹å¼ä¸ï¼sizeofçæä½æ°æ¯ç»æä½çååï¼è¿æ ·ä¼éä½å¯è¯»æ§ï¼å¹¶ä¸å¯è½ä¼å¼ 584 å ¥bugãæå¯è½æéåéç±»å被æ¹åæ¶ï¼è对åºçä¼ éç»å ååé 彿°çsizeofçç»æä¸åã 585 586 强å¶è½¬æ¢ä¸ä¸ªvoidæéè¿å弿¯å¤ä½çãCè¯è¨æ¬èº«ä¿è¯äºä»voidæéå°å ¶ä»ä»»ä½æéç±»å 587 çè½¬æ¢æ¯æ²¡æé®é¢çã 588 589 590 第åäºç« ï¼å èå¼ç 591 592 æä¸ä¸ªå¸¸è§ç误解æ¯å è彿°æ¯gccæä¾çå¯ä»¥è®©ä»£ç è¿è¡æ´å¿«çä¸ä¸ªé项ãè½ç¶ä½¿ç¨å è 593 彿°ææ¶åæ¯æ°å½çï¼æ¯å¦ä½ä¸ºä¸ç§æ¿ä»£å®çæ¹å¼ï¼è¯·ç第åäºç« ï¼ï¼ä¸è¿å¾å¤æ åµä¸ä¸æ¯ 594 è¿æ ·ãinlineå ³é®åçè¿åº¦ä½¿ç¨ä¼ä½¿å æ ¸å大ï¼ä»è使æ´ä¸ªç³»ç»è¿è¡éåº¦åæ ¢ãå ä¸ºå¤§å æ ¸ 595 ä¼å ç¨æ´å¤çæä»¤é«éç¼åï¼è¯æ³¨ï¼ä¸çº§ç¼åéå¸¸æ¯æä»¤ç¼ååæ°æ®ç¼ååå¼çï¼èä¸ä¼å¯¼ 596 è´pagecacheçå¯ç¨å ååå°ãæ³è±¡ä¸ä¸ï¼ä¸æ¬¡pagecacheæªå½ä¸å°±ä¼å¯¼è´ä¸æ¬¡ç£ç寻åï¼å° 597 èæ¶5毫ç§ã5毫ç§çæ¶é´å CPUè½æ§è¡å¾å¤å¾å¤æä»¤ã 598 599 ä¸ä¸ªåºæ¬çå忝妿ä¸ä¸ªå½æ°æ3è¡ä»¥ä¸ï¼å°±ä¸è¦æå®åæå è彿°ãè¿ä¸ªååçä¸ä¸ªä¾ 600 夿¯ï¼å¦æä½ ç¥éæä¸ªåæ°æ¯ä¸ä¸ªç¼è¯æ¶å¸¸éï¼èä¸å 为è¿ä¸ªå¸¸éä½ ç¡®å®ç¼è¯å¨å¨ç¼è¯æ¶è½ 601 ä¼åæä½ ç彿°ç大é¨å代ç ï¼é£ä»ç¶å¯ä»¥ç»å®å ä¸inlineå ³é®åãkmalloc()å è彿°å°± 602 æ¯ä¸ä¸ªå¾å¥½çä¾åã 603 604 人们ç»å¸¸ä¸»å¼ ç»staticçèä¸åªç¨äºä¸æ¬¡ç彿°å ä¸inlineï¼å¦æ¤ä¸ä¼æä»»ä½æå¤±ï¼å 为没 605 æä»ä¹å¥½æè¡¡çãè½ç¶ä»ææ¯ä¸è¯´è¿æ¯æ£ç¡®çï¼ä½æ¯å®é ä¸è¿ç§æ åµä¸å³ä½¿ä¸å inline gcc 606 ä¹å¯ä»¥èªå¨ä½¿å ¶å èãèä¸å ¶ä»ç¨æ·å¯è½ä¼è¦æ±ç§»é¤inlineï¼ç±æ¤èæ¥çäºè®ºä¼æµæ¶inline 607 èªèº«çæ½å¨ä»·å¼ï¼å¾ä¸å¿å¤±ã 608 609 610 第åå ç« ï¼å½æ°è¿åå¼åå½å 611 612 彿°å¯ä»¥è¿åå¾å¤ç§ä¸åç±»åçå¼ï¼æå¸¸è§çä¸ç§æ¯è¡¨æå½æ°æ§è¡æåæè 失败çå¼ãè¿æ · 613 çä¸ä¸ªå¼å¯ä»¥è¡¨ç¤ºä¸ºä¸ä¸ªéè¯¯ä»£ç æ´æ°ï¼-Exxxï¼å¤±è´¥ï¼0ï¼æåï¼æè ä¸ä¸ªâæåâå¸å°å¼ï¼ 614 0ï¼å¤±è´¥ï¼é0ï¼æåï¼ã 615 616 æ··å使ç¨è¿ä¸¤ç§è¡¨è¾¾æ¹å¼æ¯é¾äºåç°çbugçæ¥æºã妿Cè¯è¨æ¬èº«ä¸¥æ ¼åºåæ´å½¢åå¸å°åå 617 éï¼é£ä¹ç¼è¯å¨å°±è½å¤å¸®æä»¬åç°è¿äºé误â¦â¦ä¸è¿Cè¯è¨ä¸åºåã为äºé¿å 产çè¿ç§bugï¼è¯· 618 éµå¾ªä¸é¢çæ¯ä¾ï¼ 619 620 妿彿°çå忝ä¸ä¸ªå¨ä½æè å¼ºå¶æ§çå½ä»¤ï¼é£ä¹è¿ä¸ªå½æ°åºè¯¥è¿åéè¯¯ä»£ç æ´ 621 æ°ã妿æ¯ä¸ä¸ªå¤æï¼é£ä¹å½æ°åºè¯¥è¿åä¸ä¸ªâæåâå¸å°å¼ã 622 623 æ¯å¦ï¼âadd workâæ¯ä¸ä¸ªå½ä»¤ï¼æä»¥add_work()彿°å¨æåæ¶è¿å0ï¼å¨å¤±è´¥æ¶è¿å-EBUSYã 624 类似çï¼å 为âPCI device presentâæ¯ä¸ä¸ªå¤æï¼æä»¥pci_dev_present()彿°å¨æåæ¾å° 625 ä¸ä¸ªå¹é çè®¾å¤æ¶åºè¯¥è¿å1ï¼å¦ææ¾ä¸å°æ¶åºè¯¥è¿å0ã 626 627 ææå¯¼åºï¼è¯æ³¨ï¼EXPORTï¼ç彿°é½å¿ é¡»éµå®è¿ä¸ªæ¯ä¾ï¼ææçå ¬å ±å½æ°ä¹é½åºè¯¥å¦æ¤ãç§ 628 æï¼staticï¼å½æ°ä¸éè¦å¦æ¤ï¼ä½æ¯æä»¬ä¹æ¨èè¿æ ·åã 629 630 è¿å弿¯å®é 计ç®ç»æè䏿¯è®¡ç®æ¯å¦æåçæ å¿ç彿°ä¸åæ¤æ¯ä¾çéå¶ãä¸è¬çï¼ä»ä»¬ 631 éè¿è¿åä¸äºæ£å¸¸å¼èå´ä¹å¤çç»ææ¥è¡¨ç¤ºåºéãå ¸åçä¾åæ¯è¿åæéç彿°ï¼ä»ä»¬ä½¿ç¨ 632 NULLæè ERR_PTRæºå¶æ¥æ¥åé误ã 633 634 635 第åä¸ç« ï¼ä¸è¦éæ°åæå æ ¸å® 636 637 头æä»¶include/linux/kernel.hå å«äºä¸äºå®ï¼ä½ åºè¯¥ä½¿ç¨å®ä»¬ï¼èä¸è¦èªå·±åä¸äºå®ä»¬ç 638 åç§ãæ¯å¦ï¼å¦æä½ éè¦è®¡ç®ä¸ä¸ªæ°ç»çé¿åº¦ï¼ä½¿ç¨è¿ä¸ªå® 639 640 #define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0])) 641 642 类似çï¼å¦æä½ è¦è®¡ç®æç»æä½æåç大å°ï¼ä½¿ç¨ 643 644 #define FIELD_SIZEOF(t, f) (sizeof(((t*)0)->f)) 645 646 è¿æå¯ä»¥åä¸¥æ ¼çç±»åæ£æ¥çmin()åmax()å®ï¼å¦æä½ éè¦å¯ä»¥ä½¿ç¨å®ä»¬ãä½ å¯ä»¥èªå·±çç 647 é£ä¸ªå¤´æä»¶éè¿å®ä¹äºä»ä¹ä½ å¯ä»¥æ¿æ¥ç¨çä¸è¥¿ï¼å¦ææå®ä¹çè¯ï¼ä½ å°±ä¸åºå¨ä½ ç代ç é 648 èªå·±éæ°å®ä¹ã 649 650 651 第åå «ç« ï¼ç¼è¾å¨æ¨¡å¼è¡åå ¶ä»éè¦ç½å¦çäºæ 652 653 æä¸äºç¼è¾å¨å¯ä»¥è§£éåµå ¥å¨æºæä»¶éçç±ä¸äºç¹æ®æ è®°æ æçé 置信æ¯ãæ¯å¦ï¼emacs 654 è½å¤è§£é被æ è®°æè¿æ ·çè¡ï¼ 655 656 -*- mode: c -*- 657 658 æè è¿æ ·çï¼ 659 660 /* 661 Local Variables: 662 compile-command: "gcc -DMAGIC_DEBUG_FLAG foo.c" 663 End: 664 */ 665 666 Vimè½å¤è§£éè¿æ ·çæ è®°ï¼ 667 668 /* vim:set sw=8 noet */ 669 670 ä¸è¦å¨æºä»£ç ä¸å å«ä»»ä½è¿æ ·çå å®¹ãæ¯ä¸ªäººé½æä»èªå·±çç¼è¾å¨é ç½®ï¼ä½ çæºæä»¶ä¸åº 671 该è¦çå«äººçé ç½®ãè¿å æ¬æå ³ç¼©è¿å模å¼é ç½®çæ è®°ã人们å¯ä»¥ä½¿ç¨ä»ä»¬èªå·±å®å¶ç模 672 å¼ï¼æè 使ç¨å ¶ä»å¯ä»¥äº§çæ£ç¡®ç缩è¿ç巧妿¹æ³ã 673 674 675 676 éå½ Iï¼åè 677 678 The C Programming Language, 第äºç, ä½è Brian W. KernighanåDenni 679 M. Ritchie. Prentice Hall, Inc., 1988. ISBN 0-13-110362-8 (软ç®), 680 0-13-110370-9 (硬ç®). URL: http://cm.bell-labs.com/cm/cs/cbook/ 681 682 The Practice of Programming ä½è Brian W. KernighanåRob Pike. Addison-Wesley, 683 Inc., 1999. ISBN 0-201-61586-X. URL: http://cm.bell-labs.com/cm/cs/tpop/ 684 685 cppï¼gccï¼gcc internalsåindentçGNUæåââåK&R忬æç¸ç¬¦åçé¨åï¼å ¨é¨å¯ä»¥å¨ 686 http://www.gnu.org/manual/æ¾å° 687 688 WG14æ¯Cè¯è¨çå½é æ ååå·¥ä½ç»ï¼URL: http://www.open-std.org/JTC1/SC22/WG14/ 689 690 Kernel CodingStyleï¼ä½è greg@kroah.comå表äºOLS 2002ï¼ 691 http://www.kroah.com/linux/talks/ols_2002_kernel_codingstyle_talk/html/ 692 693 -- 694 æåæ´æ°äº2007å¹´7æ13æ¥ã