Skip to content

Instantly share code, notes, and snippets.

@ePirat
Last active August 29, 2015 14:07
Show Gist options
  • Star 2 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save ePirat/8741557003782df22229 to your computer and use it in GitHub Desktop.
Save ePirat/8741557003782df22229 to your computer and use it in GitHub Desktop.
C Coding Style proposal for Icecast

C Coding Style

Proposal for Icecast

Formatting

Indent with (4) spaces, no tabs.
A Line Should Not Exceed 80 Characters.

Brace Placement

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)

If Then Else Formatting

Recommended way:

if (condition) {
    /* code */
} else if (condition) {
    /* code */
} else {
    /* code */
}

switch Formatting

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

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

Macros and inline functions

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))

Comments

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
 */
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment