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
*/