Skip to content

Latest commit

 

History

History
89 lines (75 loc) · 2.98 KB

CONVENTIONS.md

File metadata and controls

89 lines (75 loc) · 2.98 KB

C Coding Style Conventions

Code element Convention Example
Defines ALL_CAPS #define PLATFORM_DESKTOP
Macros ALL_CAPS #define MIN(a,b) (((a)<(b))?(a):(b))
Variables lowerCase int screenWidth = 0;, float targetFrameTime = 0.016f;
Local variables lowerCase Vector2 playerPosition = { 0 };
Global variables lowerCase bool fullscreen = false;
Constants lowerCase const int maxValue = 8;
Pointers MyType *pointer Texture2D *array = NULL;
float values always x.xf float gravity = 10.0f
Operators value1*value2 int product = value*6;
Operators value1/value2 int division = value/4;
Operators value1 + value2 int sum = value + 10;
Operators value1 - value2 int res = value - 5;
Enum TitleCase enum TextureFormat
Enum members ALL_CAPS PIXELFORMAT_UNCOMPRESSED_R8G8B8
Struct TitleCase struct Texture2D, struct Material
Struct typedef TitleCase typedef struct Texture { ... } Texture;
Struct members lowerCase texture.width, color.r
Functions TitleCase InitWindow(), LoadImageFromMemory()
Functions params lowerCase width, height
Ternary Operator (condition)? result1 : result2 printf("Value is 0: %s", (value == 0)? "yes" : "no");

Other conventions:

  • All defined variables are ALWAYS initialized
  • Four spaces are used, instead of TABS
  • Trailing spaces are always avoided
  • Control flow statements are followed by a space:
if (condition) value = 0;

while (!WindowShouldClose())
{

}

for (int i = 0; i < NUM_VALUES; i++) printf("%i", i);

switch (value)
{
    case 0:
    {

    } break;
    case 2: break;
    default: break;
}
  • All conditions are always between parenthesis, but not boolean values:
if ((value > 1) && (value < 50) && valueActive)
{

}
  • Braces and curly brackets always open-close in aligned mode:
void SomeFunction()
{
   // TODO: Do something here!
}

Files and Directories Naming Conventions

  • Directories are named using snake_case: resources/models, resources/fonts
  • Files are named using snake_case: main_title.png, cubicmap.png, sound.wav

NOTE: Spaces and special characters are always avoided in the files/dir naming!

Games/Examples Directories Organization Conventions

  • Resource files are organized by context and usage in the game. Loading requirements for data are also considered (grouping data when required).
  • Descriptive names are used for the files, just reading the name of the file it should be possible to know what is that file and where fits in the game.
resources/audio/fx/long_jump.wav
resources/audio/music/main_theme.ogg
resources/screens/logo/logo.png
resources/screens/title/title.png
resources/screens/gameplay/background.png
resources/characters/player.png
resources/characters/enemy_slime.png
resources/common/font_arial.ttf
resources/common/gui.png

NOTE: Some resources require to be loaded all at once while other require to be loaded only at initialization (gui, font).