mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2025-04-14 10:57:35 +07:00
[PATCH] CodingStyle updates
Add some kernel coding style comments, mostly pulled from emails by Andrew Morton, Jesper Juhl, and Randy Dunlap. - add paragraph on switch/case indentation (with fixes) - add paragraph on multiple-assignments - add more on Braces - add section on Spaces; add typeof, alignof, & __attribute__ with sizeof; add more on postfix/prefix increment/decrement operators - add paragraph on function breaks in source files; add info on function prototype parameter names - add paragraph on EXPORT_SYMBOL placement - add section on /*-comment style, long-comment style, and data declarations and comments - correct some chapter number references that were missed when chapters were renumbered Signed-off-by: Randy Dunlap <randy.dunlap@oracle.com> Acked-by: Jesper Juhl <jesper.juhl@gmail.com> Acked-by: Jan Engelhardt <jengelh@gmx.de> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
This commit is contained in:
parent
8d94cc50aa
commit
b3fc9941fb
@ -35,12 +35,37 @@ In short, 8-char indents make things easier to read, and have the added
|
|||||||
benefit of warning you when you're nesting your functions too deep.
|
benefit of warning you when you're nesting your functions too deep.
|
||||||
Heed that warning.
|
Heed that warning.
|
||||||
|
|
||||||
|
The preferred way to ease multiple indentation levels in a switch statement is
|
||||||
|
to align the "switch" and its subordinate "case" labels in the same column
|
||||||
|
instead of "double-indenting" the "case" labels. E.g.:
|
||||||
|
|
||||||
|
switch (suffix) {
|
||||||
|
case 'G':
|
||||||
|
case 'g':
|
||||||
|
mem <<= 30;
|
||||||
|
break;
|
||||||
|
case 'M':
|
||||||
|
case 'm':
|
||||||
|
mem <<= 20;
|
||||||
|
break;
|
||||||
|
case 'K':
|
||||||
|
case 'k':
|
||||||
|
mem <<= 10;
|
||||||
|
/* fall through */
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
Don't put multiple statements on a single line unless you have
|
Don't put multiple statements on a single line unless you have
|
||||||
something to hide:
|
something to hide:
|
||||||
|
|
||||||
if (condition) do_this;
|
if (condition) do_this;
|
||||||
do_something_everytime;
|
do_something_everytime;
|
||||||
|
|
||||||
|
Don't put multiple assignments on a single line either. Kernel coding style
|
||||||
|
is super simple. Avoid tricky expressions.
|
||||||
|
|
||||||
Outside of comments, documentation and except in Kconfig, spaces are never
|
Outside of comments, documentation and except in Kconfig, spaces are never
|
||||||
used for indentation, and the above example is deliberately broken.
|
used for indentation, and the above example is deliberately broken.
|
||||||
|
|
||||||
@ -69,7 +94,7 @@ void fun(int a, int b, int c)
|
|||||||
next_statement;
|
next_statement;
|
||||||
}
|
}
|
||||||
|
|
||||||
Chapter 3: Placing Braces
|
Chapter 3: Placing Braces and Spaces
|
||||||
|
|
||||||
The other issue that always comes up in C styling is the placement of
|
The other issue that always comes up in C styling is the placement of
|
||||||
braces. Unlike the indent size, there are few technical reasons to
|
braces. Unlike the indent size, there are few technical reasons to
|
||||||
@ -81,6 +106,20 @@ brace last on the line, and put the closing brace first, thusly:
|
|||||||
we do y
|
we do y
|
||||||
}
|
}
|
||||||
|
|
||||||
|
This applies to all non-function statement blocks (if, switch, for,
|
||||||
|
while, do). E.g.:
|
||||||
|
|
||||||
|
switch (action) {
|
||||||
|
case KOBJ_ADD:
|
||||||
|
return "add";
|
||||||
|
case KOBJ_REMOVE:
|
||||||
|
return "remove";
|
||||||
|
case KOBJ_CHANGE:
|
||||||
|
return "change";
|
||||||
|
default:
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
However, there is one special case, namely functions: they have the
|
However, there is one special case, namely functions: they have the
|
||||||
opening brace at the beginning of the next line, thus:
|
opening brace at the beginning of the next line, thus:
|
||||||
|
|
||||||
@ -121,6 +160,49 @@ supply of new-lines on your screen is not a renewable resource (think
|
|||||||
25-line terminal screens here), you have more empty lines to put
|
25-line terminal screens here), you have more empty lines to put
|
||||||
comments on.
|
comments on.
|
||||||
|
|
||||||
|
3.1: Spaces
|
||||||
|
|
||||||
|
Linux kernel style for use of spaces depends (mostly) on
|
||||||
|
function-versus-keyword usage. Use a space after (most) keywords. The
|
||||||
|
notable exceptions are sizeof, typeof, alignof, and __attribute__, which look
|
||||||
|
somewhat like functions (and are usually used with parentheses in Linux,
|
||||||
|
although they are not required in the language, as in: "sizeof info" after
|
||||||
|
"struct fileinfo info;" is declared).
|
||||||
|
|
||||||
|
So use a space after these keywords:
|
||||||
|
if, switch, case, for, do, while
|
||||||
|
but not with sizeof, typeof, alignof, or __attribute__. E.g.,
|
||||||
|
s = sizeof(struct file);
|
||||||
|
|
||||||
|
Do not add spaces around (inside) parenthesized expressions. This example is
|
||||||
|
*bad*:
|
||||||
|
|
||||||
|
s = sizeof( struct file );
|
||||||
|
|
||||||
|
When declaring pointer data or a function that returns a pointer type, the
|
||||||
|
preferred use of '*' is adjacent to the data name or function name and not
|
||||||
|
adjacent to the type name. Examples:
|
||||||
|
|
||||||
|
char *linux_banner;
|
||||||
|
unsigned long long memparse(char *ptr, char **retptr);
|
||||||
|
char *match_strdup(substring_t *s);
|
||||||
|
|
||||||
|
Use one space around (on each side of) most binary and ternary operators,
|
||||||
|
such as any of these:
|
||||||
|
|
||||||
|
= + - < > * / % | & ^ <= >= == != ? :
|
||||||
|
|
||||||
|
but no space after unary operators:
|
||||||
|
& * + - ~ ! sizeof typeof alignof __attribute__ defined
|
||||||
|
|
||||||
|
no space before the postfix increment & decrement unary operators:
|
||||||
|
++ --
|
||||||
|
|
||||||
|
no space after the prefix increment & decrement unary operators:
|
||||||
|
++ --
|
||||||
|
|
||||||
|
and no space around the '.' and "->" structure member operators.
|
||||||
|
|
||||||
|
|
||||||
Chapter 4: Naming
|
Chapter 4: Naming
|
||||||
|
|
||||||
@ -152,7 +234,7 @@ variable that is used to hold a temporary value.
|
|||||||
|
|
||||||
If you are afraid to mix up your local variable names, you have another
|
If you are afraid to mix up your local variable names, you have another
|
||||||
problem, which is called the function-growth-hormone-imbalance syndrome.
|
problem, which is called the function-growth-hormone-imbalance syndrome.
|
||||||
See next chapter.
|
See chapter 6 (Functions).
|
||||||
|
|
||||||
|
|
||||||
Chapter 5: Typedefs
|
Chapter 5: Typedefs
|
||||||
@ -258,6 +340,20 @@ generally easily keep track of about 7 different things, anything more
|
|||||||
and it gets confused. You know you're brilliant, but maybe you'd like
|
and it gets confused. You know you're brilliant, but maybe you'd like
|
||||||
to understand what you did 2 weeks from now.
|
to understand what you did 2 weeks from now.
|
||||||
|
|
||||||
|
In source files, separate functions with one blank line. If the function is
|
||||||
|
exported, the EXPORT* macro for it should follow immediately after the closing
|
||||||
|
function brace line. E.g.:
|
||||||
|
|
||||||
|
int system_is_up(void)
|
||||||
|
{
|
||||||
|
return system_state == SYSTEM_RUNNING;
|
||||||
|
}
|
||||||
|
EXPORT_SYMBOL(system_is_up);
|
||||||
|
|
||||||
|
In function prototypes, include parameter names with their data types.
|
||||||
|
Although this is not required by the C language, it is preferred in Linux
|
||||||
|
because it is a simple way to add valuable information for the reader.
|
||||||
|
|
||||||
|
|
||||||
Chapter 7: Centralized exiting of functions
|
Chapter 7: Centralized exiting of functions
|
||||||
|
|
||||||
@ -306,16 +402,36 @@ time to explain badly written code.
|
|||||||
Generally, you want your comments to tell WHAT your code does, not HOW.
|
Generally, you want your comments to tell WHAT your code does, not HOW.
|
||||||
Also, try to avoid putting comments inside a function body: if the
|
Also, try to avoid putting comments inside a function body: if the
|
||||||
function is so complex that you need to separately comment parts of it,
|
function is so complex that you need to separately comment parts of it,
|
||||||
you should probably go back to chapter 5 for a while. You can make
|
you should probably go back to chapter 6 for a while. You can make
|
||||||
small comments to note or warn about something particularly clever (or
|
small comments to note or warn about something particularly clever (or
|
||||||
ugly), but try to avoid excess. Instead, put the comments at the head
|
ugly), but try to avoid excess. Instead, put the comments at the head
|
||||||
of the function, telling people what it does, and possibly WHY it does
|
of the function, telling people what it does, and possibly WHY it does
|
||||||
it.
|
it.
|
||||||
|
|
||||||
When commenting the kernel API functions, please use the kerneldoc format.
|
When commenting the kernel API functions, please use the kernel-doc format.
|
||||||
See the files Documentation/kernel-doc-nano-HOWTO.txt and scripts/kernel-doc
|
See the files Documentation/kernel-doc-nano-HOWTO.txt and scripts/kernel-doc
|
||||||
for details.
|
for details.
|
||||||
|
|
||||||
|
Linux style for comments is the C89 "/* ... */" style.
|
||||||
|
Don't use C99-style "// ..." comments.
|
||||||
|
|
||||||
|
The preferred style for long (multi-line) comments is:
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This is the preferred style for multi-line
|
||||||
|
* comments in the Linux kernel source code.
|
||||||
|
* Please use it consistently.
|
||||||
|
*
|
||||||
|
* Description: A column of asterisks on the left side,
|
||||||
|
* with beginning and ending almost-blank lines.
|
||||||
|
*/
|
||||||
|
|
||||||
|
It's also important to comment data, whether they are basic types or derived
|
||||||
|
types. To this end, use just one data declaration per line (no commas for
|
||||||
|
multiple data declarations). This leaves you room for a small comment on each
|
||||||
|
item, explaining its use.
|
||||||
|
|
||||||
|
|
||||||
Chapter 9: You've made a mess of it
|
Chapter 9: You've made a mess of it
|
||||||
|
|
||||||
That's OK, we all do. You've probably been told by your long-time Unix
|
That's OK, we all do. You've probably been told by your long-time Unix
|
||||||
@ -591,4 +707,4 @@ Kernel CodingStyle, by greg@kroah.com at OLS 2002:
|
|||||||
http://www.kroah.com/linux/talks/ols_2002_kernel_codingstyle_talk/html/
|
http://www.kroah.com/linux/talks/ols_2002_kernel_codingstyle_talk/html/
|
||||||
|
|
||||||
--
|
--
|
||||||
Last updated on 30 April 2006.
|
Last updated on 2006-December-06.
|
||||||
|
Loading…
Reference in New Issue
Block a user