| 1 |
1625 |
jcastillo |
|
| 2 |
|
|
Linux kernel coding style
|
| 3 |
|
|
|
| 4 |
|
|
This is a short document describing the preferred coding style for the
|
| 5 |
|
|
linux kernel. Coding style is very personal, and I won't _force_ my
|
| 6 |
|
|
views on anybody, but this is what goes for anything that I have to be
|
| 7 |
|
|
able to maintain, and I'd prefer it for most other things too. Please
|
| 8 |
|
|
at least consider the points made here.
|
| 9 |
|
|
|
| 10 |
|
|
First off, I'd suggest printing out a copy of the GNU coding standards,
|
| 11 |
|
|
and NOT reading it. Burn them, it's a great symbolic gesture.
|
| 12 |
|
|
|
| 13 |
|
|
Anyway, here goes:
|
| 14 |
|
|
|
| 15 |
|
|
|
| 16 |
|
|
Chapter 1: Indentation
|
| 17 |
|
|
|
| 18 |
|
|
Tabs are 8 characters, and thus indentations are also 8 characters.
|
| 19 |
|
|
There are heretic movements that try to make indentations 4 (or even 2!)
|
| 20 |
|
|
characters deep, and that is akin to trying to define the value of PI to
|
| 21 |
|
|
be 3.
|
| 22 |
|
|
|
| 23 |
|
|
Rationale: The whole idea behind indentation is to clearly define where
|
| 24 |
|
|
a block of control starts and ends. Especially when you've been looking
|
| 25 |
|
|
at your screen for 20 straight hours, you'll find it a lot easier to see
|
| 26 |
|
|
how the indentation works if you have large indentations.
|
| 27 |
|
|
|
| 28 |
|
|
Now, some people will claim that having 8-character indentations makes
|
| 29 |
|
|
the code move too far to the right, and makes it hard to read on a
|
| 30 |
|
|
80-character terminal screen. The answer to that is that if you need
|
| 31 |
|
|
more than 3 levels of indentation, you're screwed anyway, and should fix
|
| 32 |
|
|
your program.
|
| 33 |
|
|
|
| 34 |
|
|
In short, 8-char indents make things easier to read, and have the added
|
| 35 |
|
|
benefit of warning you when you're nesting your functions too deep.
|
| 36 |
|
|
Heed that warning.
|
| 37 |
|
|
|
| 38 |
|
|
|
| 39 |
|
|
Chapter 2: Placing Braces
|
| 40 |
|
|
|
| 41 |
|
|
The other issue that always comes up in C styling is the placement of
|
| 42 |
|
|
braces. Unlike the indent size, there are few technical reasons to
|
| 43 |
|
|
choose one placement strategy over the other, but the preferred way, as
|
| 44 |
|
|
shown to us by the prophets Kernighan and Ritchie, is to put the opening
|
| 45 |
|
|
brace last on the line, and put the closing brace first, thusly:
|
| 46 |
|
|
|
| 47 |
|
|
if (x is true) {
|
| 48 |
|
|
we do y
|
| 49 |
|
|
}
|
| 50 |
|
|
|
| 51 |
|
|
However, there is one special case, namely functions: they have the
|
| 52 |
|
|
opening brace at the beginning of the next line, thus:
|
| 53 |
|
|
|
| 54 |
|
|
int function(int x)
|
| 55 |
|
|
{
|
| 56 |
|
|
body of function
|
| 57 |
|
|
}
|
| 58 |
|
|
|
| 59 |
|
|
Heretic people all over the world have claimed that this inconsistency
|
| 60 |
|
|
is ... well ... inconsistent, but all right-thinking people know that
|
| 61 |
|
|
(a) K&R are _right_ and (b) K&R are right. Besides, functions are
|
| 62 |
|
|
special anyway (you can't nest them in C (well, you can in gcc, actually,
|
| 63 |
|
|
but this is horribly nonstandard, so we will ignore it)).
|
| 64 |
|
|
|
| 65 |
|
|
Note that the closing brace is empty on a line of its own, _except_ in
|
| 66 |
|
|
the cases where it is followed by a continuation of the same statement,
|
| 67 |
|
|
ie a "while" in a do-statement or an "else" in an if-statement, like
|
| 68 |
|
|
this:
|
| 69 |
|
|
|
| 70 |
|
|
do {
|
| 71 |
|
|
body of do-loop
|
| 72 |
|
|
} while (condition);
|
| 73 |
|
|
|
| 74 |
|
|
and
|
| 75 |
|
|
|
| 76 |
|
|
if (x == y) {
|
| 77 |
|
|
..
|
| 78 |
|
|
} else if (x > y) {
|
| 79 |
|
|
...
|
| 80 |
|
|
} else {
|
| 81 |
|
|
....
|
| 82 |
|
|
}
|
| 83 |
|
|
|
| 84 |
|
|
Rationale: K&R.
|
| 85 |
|
|
|
| 86 |
|
|
Also, note that this brace-placement also minimizes the number of empty
|
| 87 |
|
|
(or almost empty) lines, without any loss of readability. Thus, as the
|
| 88 |
|
|
supply of new-lines on your screen is not a renewable resource (think
|
| 89 |
|
|
25-line terminal screens here), you have more empty lines to put
|
| 90 |
|
|
comments on.
|
| 91 |
|
|
|
| 92 |
|
|
|
| 93 |
|
|
Chapter 3: Naming
|
| 94 |
|
|
|
| 95 |
|
|
C is a Spartan language, and so should your naming be. Unlike Modula-2
|
| 96 |
|
|
and Pascal programmers, C programmers do not use cute names like
|
| 97 |
|
|
ThisVariableIsATemporaryCounter. A C programmer would call that
|
| 98 |
|
|
variable "tmp", which is much easier to write, and not the least more
|
| 99 |
|
|
difficult to understand.
|
| 100 |
|
|
|
| 101 |
|
|
HOWEVER, while mixed-case names are frowned upon, descriptive names for
|
| 102 |
|
|
global variables are a must. To call a global function "foo" is a
|
| 103 |
|
|
shooting offense.
|
| 104 |
|
|
|
| 105 |
|
|
GLOBAL variables (to be used only if you _really_ need them) need to
|
| 106 |
|
|
have descriptive names, as do global functions. If you have a function
|
| 107 |
|
|
that counts the number of active users, you should call that
|
| 108 |
|
|
"count_active_users()" or similar, you should _not_ call it "cntusr()".
|
| 109 |
|
|
|
| 110 |
|
|
Encoding the type of a function into the name (so-called Hungarian
|
| 111 |
|
|
notation) is brain damaged - the compiler knows the types anyway and can
|
| 112 |
|
|
check those, and it only confuses the programmer. No wonder MicroSoft
|
| 113 |
|
|
makes buggy programs.
|
| 114 |
|
|
|
| 115 |
|
|
LOCAL variable names should be short, and to the point. If you have
|
| 116 |
|
|
some random integer loop counter, it should probably be called "i".
|
| 117 |
|
|
Calling it "loop_counter" is non-productive, if there is no chance of it
|
| 118 |
|
|
being mis-understood. Similarly, "tmp" can be just about any type of
|
| 119 |
|
|
variable that is used to hold a temporary value.
|
| 120 |
|
|
|
| 121 |
|
|
If you are afraid to mix up your local variable names, you have another
|
| 122 |
|
|
problem, which is called the function-growth-hormone-imbalance syndrome.
|
| 123 |
|
|
See next chapter.
|
| 124 |
|
|
|
| 125 |
|
|
|
| 126 |
|
|
Chapter 4: Functions
|
| 127 |
|
|
|
| 128 |
|
|
Functions should be short and sweet, and do just one thing. They should
|
| 129 |
|
|
fit on one or two screenfuls of text (the ISO/ANSI screen size is 80x24,
|
| 130 |
|
|
as we all know), and do one thing and do that well.
|
| 131 |
|
|
|
| 132 |
|
|
The maximum length of a function is inversely proportional to the
|
| 133 |
|
|
complexity and indentation level of that function. So, if you have a
|
| 134 |
|
|
conceptually simple function that is just one long (but simple)
|
| 135 |
|
|
case-statement, where you have to do lots of small things for a lot of
|
| 136 |
|
|
different cases, it's OK to have a longer function.
|
| 137 |
|
|
|
| 138 |
|
|
However, if you have a complex function, and you suspect that a
|
| 139 |
|
|
less-than-gifted first-year high-school student might not even
|
| 140 |
|
|
understand what the function is all about, you should adhere to the
|
| 141 |
|
|
maximum limits all the more closely. Use helper functions with
|
| 142 |
|
|
descriptive names (you can ask the compiler to in-line them if you think
|
| 143 |
|
|
it's performance-critical, and it will probably do a better job of it
|
| 144 |
|
|
that you would have done).
|
| 145 |
|
|
|
| 146 |
|
|
Another measure of the function is the number of local variables. They
|
| 147 |
|
|
shouldn't exceed 5-10, or you're doing something wrong. Re-think the
|
| 148 |
|
|
function, and split it into smaller pieces. A human brain can
|
| 149 |
|
|
generally easily keep track of about 7 different things, anything more
|
| 150 |
|
|
and it gets confused. You know you're brilliant, but maybe you'd like
|
| 151 |
|
|
to understand what you did 2 weeks from now.
|
| 152 |
|
|
|
| 153 |
|
|
|
| 154 |
|
|
Chapter 5: Commenting
|
| 155 |
|
|
|
| 156 |
|
|
Comments are good, but there is also a danger of over-commenting. NEVER
|
| 157 |
|
|
try to explain HOW your code works in a comment: it's much better to
|
| 158 |
|
|
write the code so that the _working_ is obvious, and it's a waste of
|
| 159 |
|
|
time to explain badly written code.
|
| 160 |
|
|
|
| 161 |
|
|
Generally, you want your comments to tell WHAT your code does, not HOW.
|
| 162 |
|
|
Also, try to avoid putting comments inside a function body: if the
|
| 163 |
|
|
function is so complex that you need to separately comment parts of it,
|
| 164 |
|
|
you should probably go back to chapter 4 for a while. You can make
|
| 165 |
|
|
small comments to note or warn about something particularly clever (or
|
| 166 |
|
|
ugly), but try to avoid excess. Instead, put the comments at the head
|
| 167 |
|
|
of the function, telling people what it does, and possibly WHY it does
|
| 168 |
|
|
it.
|
| 169 |
|
|
|
| 170 |
|
|
|
| 171 |
|
|
Chapter 6: You've made a mess of it
|
| 172 |
|
|
|
| 173 |
|
|
That's OK, we all do. You've probably been told by your long-time Unix
|
| 174 |
|
|
user helper that "GNU emacs" automatically formats the C sources for
|
| 175 |
|
|
you, and you've noticed that yes, it does do that, but the defaults it
|
| 176 |
|
|
uses are less than desirable (in fact, they are worse than random
|
| 177 |
|
|
typing - a infinite number of monkeys typing into GNU emacs would never
|
| 178 |
|
|
make a good program).
|
| 179 |
|
|
|
| 180 |
|
|
So, you can either get rid of GNU emacs, or change it to use saner
|
| 181 |
|
|
values. To do the latter, you can stick the following in your .emacs file:
|
| 182 |
|
|
|
| 183 |
|
|
(defun linux-c-mode ()
|
| 184 |
|
|
"C mode with adjusted defaults for use with the Linux kernel."
|
| 185 |
|
|
(interactive)
|
| 186 |
|
|
(c-mode)
|
| 187 |
|
|
(setq c-indent-level 8)
|
| 188 |
|
|
(setq c-brace-imaginary-offset 0)
|
| 189 |
|
|
(setq c-brace-offset -8)
|
| 190 |
|
|
(setq c-argdecl-indent 8)
|
| 191 |
|
|
(setq c-label-offset -8)
|
| 192 |
|
|
(setq c-continued-statement-offset 8)
|
| 193 |
|
|
(setq indent-tabs-mode nil)
|
| 194 |
|
|
(setq tab-width 8))
|
| 195 |
|
|
|
| 196 |
|
|
This will define the M-x linux-c-mode command. When hacking on a
|
| 197 |
|
|
module, if you put the string -*- linux-c -*- somewhere on the first
|
| 198 |
|
|
two lines, this mode will be automatically invoked. Also, you may want
|
| 199 |
|
|
to add
|
| 200 |
|
|
|
| 201 |
|
|
(setq auto-mode-alist (cons '("/usr/src/linux.*/.*\\.[ch]$" . linux-c-mode)
|
| 202 |
|
|
auto-mode-alist))
|
| 203 |
|
|
|
| 204 |
|
|
to your .emacs file if you want to have linux-c-mode switched on
|
| 205 |
|
|
automagically when you edit source files under /usr/src/linux.
|
| 206 |
|
|
|
| 207 |
|
|
But even if you fail in getting emacs to do sane formatting, not
|
| 208 |
|
|
everything is lost: use "indent".
|
| 209 |
|
|
|
| 210 |
|
|
Now, again, GNU indent has the same brain dead settings that GNU emacs
|
| 211 |
|
|
has, which is why you need to give it a few command line options.
|
| 212 |
|
|
However, that's not too bad, because even the makers of GNU indent
|
| 213 |
|
|
recognize the authority of K&R (the GNU people aren't evil, they are
|
| 214 |
|
|
just severely misguided in this matter), so you just give indent the
|
| 215 |
|
|
options "-kr -i8" (stands for "K&R, 8 character indents").
|
| 216 |
|
|
|
| 217 |
|
|
"indent" has a lot of options, and especially when it comes to comment
|
| 218 |
|
|
re-formatting you may want to take a look at the manual page. But
|
| 219 |
|
|
remember: "indent" is not a fix for bad programming.
|