Skip to main content

C Code Guidelines

🚧Under Construction
This section of the documentation is not formalized and may change.
Help us by contributing to it on our GitHub.

Names

Use pascal case for structs and snake case for variables and functions.

tip

When defining a const variable always write it in UPPERCASE

Do ✅:

struct Example;
size_t example_t;
void example_func();
int example_var;
const EXAMPLE_VAR;

Don't ❌:

struct example;
size_t exampleT; // size_t exampleSize;
void ExampleFunc(); // void exampleFUNC();
int exampleVar;
const example_var;

Use full words, except when the variable name is too long.

Do ✅:

int my_var;
int length;
char width;

Don't ❌:

int my_variable;
int len;
char width;
caution

When declaring a constant use always CONST and not PREPROCESSOR DIRECTIVES

Use descriptive names in functions.

Do ✅:

char convert_to_ascii(int);

Don't ❌:

char to_ascii(int);

Leave useless variable names out of function declarations.

Do ✅:

char my_character(char);

Don't ❌:

char my_character(char character);

Switch

In switch cases don't indent another level.

Do ✅:

switch (foo) {
case 1:
printf("bread");
case 2:
printf("akane");
default:
printf("akane cat");
}

Don't ❌:

switch (foo) {
case 1:
printf("bread");
case 2:
printf("akane");
default:
printf("akane cat");
}

Headers

Use #pragma once for header files. Why? Because #pragma once is less prone to making mistakes and it is less code to type.

Do ✅:

#pragma once

Don't ❌:

#ifndef FILE_H
#define FILE_H

/*
* code
*/

#endif // FILE_H

Include libraries first, then include local headers.

Do ✅:

#include <stdio.h>

#include "file.h"

Don't ❌:

#include "file.h"

#include <stdio.h>

Blocks

When writing a function, or a for cycle, don't write curly braces at the beginning of a new line.

Do ✅:

int my_function(int a, int b) {
// code
}

for (int i = 0; i <= 10; i++) {
printf("%d\n", i);
}

Don't ❌:

int my_function(int a, int b)
{
// code
}

for (int i = 0; i <= 10; i++)
{
printf("%d\n", i);
}

Use 4 spaces as tab instead of 2.

Do ✅:

int my_function(int a, int b) {
// code

if (my_statement == true)
{
// code
}
else
{
return 1;
}
}

Don't ❌:

int my_function(int a, int b) {
// code

if (my_statement == true)
{
// code
}
else
{
return 1;
}
}

Statements

Use conditional operators instead of if else statements.

Do ✅:

my_variable % 2 == 0 ? printf("even") : printf("odd");

Don't ❌:

if (my_variable % 2 == 0) {
printf("even");
} else {
printf("odd");
}

When the statement is too long, go to a new line.

Do ✅:

my_variable  % 2 == 0 && my_variable2 % 4 == 0 ? printf("foo") : \
my_variable3 % 6 == 0 && my_variable4 % 8 == 0 ? printf("fee") : printf("fuu");

Don't ❌:

my_variable  % 2 == 0 && my_variable2 % 4 == 0 ? printf("foo") : my_variable3 % 6 == 0 && my_variable4 % 8 == 0 ? printf("fee") : printf("fuu");

Types

Delete int when using an unsigned modifier, and don't use a signed modifier.

Do ✅:

unsigned my_variable;
int my_variable2;

Don't ❌:

unsigned int a;
signed b;
signed int c;