Formatting

The Nilstrieb C Style Guide Edition 2 mostly follows the principle of maximal readability. Code, especially C code, is mostly read (by security researchers to find the vulnerabilities), and therefore readability comes before writability.

Control flow

Never use braces with if/while/do/for statements as they introduce clutter. If your body cannot fit into a single line, make a new function instead.

   #include<stdio.h>

   void if_bdy() {
      printf("Hello, ");
      printf("World!");
   }
   
   void foo() {
      if (true)
         if_bdy();
      else
         printf("True was false!");
   }

Identation

C code must be indented with 3 spaces. The top-level should be indented as well.

   #include<stdio.h>

   int main() {}

Conventions

General conventions that C code should obey.

Memory allocation

Always check the return value of malloc. If it is a null pointer, dereference it to immediately abort the processas as we cannot reasonably recover from OOM in most cases. If such a recovery is possible, recover instead. On some platforms, dereferencing a null pointer does not abort the process. In these cases, the null pointer is a perfectly fine pointer, and just continue using it instead. Note that this derefence should usually be a volatile operation as the compiler would optimize it away otherwise. I have reported upstream issues on compilers about this, but they have not yet answered.

If the pointer is non-null, free it directly after the malloc call. This prevents memory leaks of all sorts. Afterwards, you can use it freely in your program.

Includes

#include directives shall be placed at the start of the file. But usually, it's better to not use the preprocessor at all. Paste the code in by hand so that it is clearly visible in version control.

Identifers

All identifiers should be given meaningful english names. To work with ancient linkers, function names should contain six characters at most.

Comments

Comments are vital to readability. Therefore, code should always be well commented. Comments must be written in the lingua franca of programming, Swiss German.

int main() {
   int five = 5; // füüf
   
   printf("Your number: %d", five); // äm benutzer füüf usgee
}