aboutsummaryrefslogtreecommitdiffstats
path: root/Documentation/CodingStyle
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2015-04-18 11:10:49 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2015-04-18 11:10:49 -0400
commitd6a24d0640d609138a4e40a4ce9fd9fe7859e24c (patch)
treeaa40fb7f5d03dc605634fb4030afd8798bd6bc0b /Documentation/CodingStyle
parent1f5014d6a77513fa7cefe30eb7791d5856c04384 (diff)
parent197175427a221fe3200f7727ea35e261727e7228 (diff)
Merge tag 'docs-for-linus' of git://git.lwn.net/linux-2.6
Pull documentation updates from Jonathan Corbet: "Numerous fixes, the overdue removal of the i2o docs, some new Chinese translations, and, hopefully, the README fix that will end the flow of identical patches to that file" * tag 'docs-for-linus' of git://git.lwn.net/linux-2.6: (34 commits) Documentation/memcg: update memcg/kmem status Documentation: blackfin: Makefile: Typo building issue Documentation/vm/pagemap.txt: correct location of page-types tool Documentation/memory-barriers.txt: typo fix doc: Add guest_nice column to example output of `cat /proc/stat' Documentation/kernel-parameters: Move "eagerfpu" to its right place Documentation: gpio: Update ACPI part of the document to mention _DSD docs/completion.txt: Various tweaks and corrections doc: completion: context, scope and language fixes Documentation:Update Documentation/zh_CN/arm64/memory.txt Documentation:Update Documentation/zh_CN/arm64/booting.txt Documentation: Chinese translation of arm64/legacy_instructions.txt DocBook media: fix broken EIA hyperlink Documentation: tweak the maintainers entry README: Change gzip/bzip2 to xz compression format README: Update version number reference doc:pci: Fix typo in Documentation/PCI Documentation: drm: Use '->' when describing access through pointers. Documentation: Remove mentioning of block barriers Documentation/email-clients.txt: Fix one grammar mistake, add extra info about TB ...
Diffstat (limited to 'Documentation/CodingStyle')
-rw-r--r--Documentation/CodingStyle149
1 files changed, 76 insertions, 73 deletions
diff --git a/Documentation/CodingStyle b/Documentation/CodingStyle
index 4d4f06d47e06..f4b78eafd92a 100644
--- a/Documentation/CodingStyle
+++ b/Documentation/CodingStyle
@@ -13,7 +13,7 @@ and NOT read it. Burn them, it's a great symbolic gesture.
13Anyway, here goes: 13Anyway, here goes:
14 14
15 15
16 Chapter 1: Indentation 16 Chapter 1: Indentation
17 17
18Tabs are 8 characters, and thus indentations are also 8 characters. 18Tabs are 8 characters, and thus indentations are also 8 characters.
19There are heretic movements that try to make indentations 4 (or even 2!) 19There are heretic movements that try to make indentations 4 (or even 2!)
@@ -56,7 +56,6 @@ instead of "double-indenting" the "case" labels. E.g.:
56 break; 56 break;
57 } 57 }
58 58
59
60Don't put multiple statements on a single line unless you have 59Don't put multiple statements on a single line unless you have
61something to hide: 60something to hide:
62 61
@@ -156,25 +155,25 @@ comments on.
156 155
157Do not unnecessarily use braces where a single statement will do. 156Do not unnecessarily use braces where a single statement will do.
158 157
159if (condition) 158 if (condition)
160 action(); 159 action();
161 160
162and 161and
163 162
164if (condition) 163 if (condition)
165 do_this(); 164 do_this();
166else 165 else
167 do_that(); 166 do_that();
168 167
169This does not apply if only one branch of a conditional statement is a single 168This does not apply if only one branch of a conditional statement is a single
170statement; in the latter case use braces in both branches: 169statement; in the latter case use braces in both branches:
171 170
172if (condition) { 171 if (condition) {
173 do_this(); 172 do_this();
174 do_that(); 173 do_that();
175} else { 174 } else {
176 otherwise(); 175 otherwise();
177} 176 }
178 177
179 3.1: Spaces 178 3.1: Spaces
180 179
@@ -186,8 +185,11 @@ although they are not required in the language, as in: "sizeof info" after
186"struct fileinfo info;" is declared). 185"struct fileinfo info;" is declared).
187 186
188So use a space after these keywords: 187So use a space after these keywords:
188
189 if, switch, case, for, do, while 189 if, switch, case, for, do, while
190
190but not with sizeof, typeof, alignof, or __attribute__. E.g., 191but not with sizeof, typeof, alignof, or __attribute__. E.g.,
192
191 s = sizeof(struct file); 193 s = sizeof(struct file);
192 194
193Do not add spaces around (inside) parenthesized expressions. This example is 195Do not add spaces around (inside) parenthesized expressions. This example is
@@ -209,12 +211,15 @@ such as any of these:
209 = + - < > * / % | & ^ <= >= == != ? : 211 = + - < > * / % | & ^ <= >= == != ? :
210 212
211but no space after unary operators: 213but no space after unary operators:
214
212 & * + - ~ ! sizeof typeof alignof __attribute__ defined 215 & * + - ~ ! sizeof typeof alignof __attribute__ defined
213 216
214no space before the postfix increment & decrement unary operators: 217no space before the postfix increment & decrement unary operators:
218
215 ++ -- 219 ++ --
216 220
217no space after the prefix increment & decrement unary operators: 221no space after the prefix increment & decrement unary operators:
222
218 ++ -- 223 ++ --
219 224
220and no space around the '.' and "->" structure member operators. 225and no space around the '.' and "->" structure member operators.
@@ -268,13 +273,11 @@ See chapter 6 (Functions).
268 Chapter 5: Typedefs 273 Chapter 5: Typedefs
269 274
270Please don't use things like "vps_t". 275Please don't use things like "vps_t".
271
272It's a _mistake_ to use typedef for structures and pointers. When you see a 276It's a _mistake_ to use typedef for structures and pointers. When you see a
273 277
274 vps_t a; 278 vps_t a;
275 279
276in the source, what does it mean? 280in the source, what does it mean?
277
278In contrast, if it says 281In contrast, if it says
279 282
280 struct virtual_container *a; 283 struct virtual_container *a;
@@ -372,11 +375,11 @@ In source files, separate functions with one blank line. If the function is
372exported, the EXPORT* macro for it should follow immediately after the closing 375exported, the EXPORT* macro for it should follow immediately after the closing
373function brace line. E.g.: 376function brace line. E.g.:
374 377
375int system_is_up(void) 378 int system_is_up(void)
376{ 379 {
377 return system_state == SYSTEM_RUNNING; 380 return system_state == SYSTEM_RUNNING;
378} 381 }
379EXPORT_SYMBOL(system_is_up); 382 EXPORT_SYMBOL(system_is_up);
380 383
381In function prototypes, include parameter names with their data types. 384In function prototypes, include parameter names with their data types.
382Although this is not required by the C language, it is preferred in Linux 385Although this is not required by the C language, it is preferred in Linux
@@ -405,34 +408,34 @@ The rationale for using gotos is:
405 modifications are prevented 408 modifications are prevented
406- saves the compiler work to optimize redundant code away ;) 409- saves the compiler work to optimize redundant code away ;)
407 410
408int fun(int a) 411 int fun(int a)
409{ 412 {
410 int result = 0; 413 int result = 0;
411 char *buffer; 414 char *buffer;
412 415
413 buffer = kmalloc(SIZE, GFP_KERNEL); 416 buffer = kmalloc(SIZE, GFP_KERNEL);
414 if (!buffer) 417 if (!buffer)
415 return -ENOMEM; 418 return -ENOMEM;
416 419
417 if (condition1) { 420 if (condition1) {
418 while (loop1) { 421 while (loop1) {
419 ... 422 ...
423 }
424 result = 1;
425 goto out_buffer;
420 } 426 }
421 result = 1; 427 ...
422 goto out_buffer; 428 out_buffer:
429 kfree(buffer);
430 return result;
423 } 431 }
424 ...
425out_buffer:
426 kfree(buffer);
427 return result;
428}
429 432
430A common type of bug to be aware of it "one err bugs" which look like this: 433A common type of bug to be aware of it "one err bugs" which look like this:
431 434
432err: 435 err:
433 kfree(foo->bar); 436 kfree(foo->bar);
434 kfree(foo); 437 kfree(foo);
435 return ret; 438 return ret;
436 439
437The bug in this code is that on some exit paths "foo" is NULL. Normally the 440The bug in this code is that on some exit paths "foo" is NULL. Normally the
438fix for this is to split it up into two error labels "err_bar:" and "err_foo:". 441fix for this is to split it up into two error labels "err_bar:" and "err_foo:".
@@ -503,9 +506,9 @@ values. To do the latter, you can stick the following in your .emacs file:
503(defun c-lineup-arglist-tabs-only (ignored) 506(defun c-lineup-arglist-tabs-only (ignored)
504 "Line up argument lists by tabs, not spaces" 507 "Line up argument lists by tabs, not spaces"
505 (let* ((anchor (c-langelem-pos c-syntactic-element)) 508 (let* ((anchor (c-langelem-pos c-syntactic-element))
506 (column (c-langelem-2nd-pos c-syntactic-element)) 509 (column (c-langelem-2nd-pos c-syntactic-element))
507 (offset (- (1+ column) anchor)) 510 (offset (- (1+ column) anchor))
508 (steps (floor offset c-basic-offset))) 511 (steps (floor offset c-basic-offset)))
509 (* (max steps 1) 512 (* (max steps 1)
510 c-basic-offset))) 513 c-basic-offset)))
511 514
@@ -612,7 +615,7 @@ have a reference count on it, you almost certainly have a bug.
612 615
613Names of macros defining constants and labels in enums are capitalized. 616Names of macros defining constants and labels in enums are capitalized.
614 617
615#define CONSTANT 0x12345 618 #define CONSTANT 0x12345
616 619
617Enums are preferred when defining several related constants. 620Enums are preferred when defining several related constants.
618 621
@@ -623,28 +626,28 @@ Generally, inline functions are preferable to macros resembling functions.
623 626
624Macros with multiple statements should be enclosed in a do - while block: 627Macros with multiple statements should be enclosed in a do - while block:
625 628
626#define macrofun(a, b, c) \ 629 #define macrofun(a, b, c) \
627 do { \ 630 do { \
628 if (a == 5) \ 631 if (a == 5) \
629 do_this(b, c); \ 632 do_this(b, c); \
630 } while (0) 633 } while (0)
631 634
632Things to avoid when using macros: 635Things to avoid when using macros:
633 636
6341) macros that affect control flow: 6371) macros that affect control flow:
635 638
636#define FOO(x) \ 639 #define FOO(x) \
637 do { \ 640 do { \
638 if (blah(x) < 0) \ 641 if (blah(x) < 0) \
639 return -EBUGGERED; \ 642 return -EBUGGERED; \
640 } while(0) 643 } while(0)
641 644
642is a _very_ bad idea. It looks like a function call but exits the "calling" 645is a _very_ bad idea. It looks like a function call but exits the "calling"
643function; don't break the internal parsers of those who will read the code. 646function; don't break the internal parsers of those who will read the code.
644 647
6452) macros that depend on having a local variable with a magic name: 6482) macros that depend on having a local variable with a magic name:
646 649
647#define FOO(val) bar(index, val) 650 #define FOO(val) bar(index, val)
648 651
649might look like a good thing, but it's confusing as hell when one reads the 652might look like a good thing, but it's confusing as hell when one reads the
650code and it's prone to breakage from seemingly innocent changes. 653code and it's prone to breakage from seemingly innocent changes.
@@ -656,8 +659,8 @@ bite you if somebody e.g. turns FOO into an inline function.
656must enclose the expression in parentheses. Beware of similar issues with 659must enclose the expression in parentheses. Beware of similar issues with
657macros using parameters. 660macros using parameters.
658 661
659#define CONSTANT 0x4000 662 #define CONSTANT 0x4000
660#define CONSTEXP (CONSTANT | 3) 663 #define CONSTEXP (CONSTANT | 3)
661 664
6625) namespace collisions when defining local variables in macros resembling 6655) namespace collisions when defining local variables in macros resembling
663functions: 666functions:
@@ -809,11 +812,11 @@ you should use, rather than explicitly coding some variant of them yourself.
809For example, if you need to calculate the length of an array, take advantage 812For example, if you need to calculate the length of an array, take advantage
810of the macro 813of the macro
811 814
812 #define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0])) 815 #define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0]))
813 816
814Similarly, if you need to calculate the size of some structure member, use 817Similarly, if you need to calculate the size of some structure member, use
815 818
816 #define FIELD_SIZEOF(t, f) (sizeof(((t*)0)->f)) 819 #define FIELD_SIZEOF(t, f) (sizeof(((t*)0)->f))
817 820
818There are also min() and max() macros that do strict type checking if you 821There are also min() and max() macros that do strict type checking if you
819need them. Feel free to peruse that header file to see what else is already 822need them. Feel free to peruse that header file to see what else is already
@@ -826,19 +829,19 @@ Some editors can interpret configuration information embedded in source files,
826indicated with special markers. For example, emacs interprets lines marked 829indicated with special markers. For example, emacs interprets lines marked
827like this: 830like this:
828 831
829-*- mode: c -*- 832 -*- mode: c -*-
830 833
831Or like this: 834Or like this:
832 835
833/* 836 /*
834Local Variables: 837 Local Variables:
835compile-command: "gcc -DMAGIC_DEBUG_FLAG foo.c" 838 compile-command: "gcc -DMAGIC_DEBUG_FLAG foo.c"
836End: 839 End:
837*/ 840 */
838 841
839Vim interprets markers that look like this: 842Vim interprets markers that look like this:
840 843
841/* vim:set sw=8 noet */ 844 /* vim:set sw=8 noet */
842 845
843Do not include any of these in source files. People have their own personal 846Do not include any of these in source files. People have their own personal
844editor configurations, and your source files should not override them. This 847editor configurations, and your source files should not override them. This
@@ -915,9 +918,9 @@ At the end of any non-trivial #if or #ifdef block (more than a few lines),
915place a comment after the #endif on the same line, noting the conditional 918place a comment after the #endif on the same line, noting the conditional
916expression used. For instance: 919expression used. For instance:
917 920
918#ifdef CONFIG_SOMETHING 921 #ifdef CONFIG_SOMETHING
919... 922 ...
920#endif /* CONFIG_SOMETHING */ 923 #endif /* CONFIG_SOMETHING */
921 924
922 925
923 Appendix I: References 926 Appendix I: References