Proposal for Icecast
Indent with (4) spaces, no tabs.
A Line Should Not Exceed 80 Characters.
All if
, while
, for
and do
statements should either have braces or be on a single line.
Do not put parens next to keywords. Put a space between.
if (foo == 1) {
/* code */
} else {
/* code */
}
For complex conditions you can put spaces in the start and the end of the statement, if it helps readability:
if ( (a > 5) && (b < 3) || (a < 7) && (!b) && (func(test_var) << 7) == 5 ) {
/* code */
}
One line form:
if (somevalue == 1) somevalue = 2;
(Should be used only where it really makes sense and stays readable)
Recommended way:
if (condition) {
/* code */
} else if (condition) {
/* code */
} else {
/* code */
}
Falling through a case statement into the next case statement shall be permitted as long as a comment is included.
switch (something) {
case 1:
/* code */
break;
case 2:
/* code */
/* fall through */
case 3:
/* code */
break;
default:
/* code */
break;
}
(condition) ? funct1() : func2();
or
(condition)
? long statement
: another long statement;
Functions should limit themselves to a single page of code. Unlike conditions, functions should have the curly brace on a newline. No whitespace between function name and brace.
static void test(client_t *client, const char *mount)
{
/* code */
}
If variable list is too long, break it as follow
static void test(client_t *client,
const char *mount)
{
/* code */
}
Don't change syntax via macro substitution. Macros for small tasks are ok, longer ones should be, when possible, inline functions
inline int max(int a, int b)
{
return (a > b) ? a : b;
}
When putting expressions in macros always wrap the expression in parenthesis
#define ADD(x,y) ((x) + (y))
For comments, //
should never be used but instead /* comment here */
.
If the comment is about what a special if case does, it should be on the next line:
if (ret == 0) {
/* nothing to do */
Multiline comment should have text on the first line, but not on the last:
/* This is text on the first line
* an here is even more cool text
*/