| name | coding-standard-c |
| description | Enforce C coding standards including snake_case variables and functions, UPPER_SNAKE_CASE macros, and snake_case filenames. |
C Coding Standards
When reviewing or generating C code, follow these rules:
File Naming
- Source files: snake_case with
.c extension (e.g., user_service.c, data_parser.c)
- Header files: snake_case with
.h extension (e.g., user_service.h, data_parser.h)
- Keep names short but descriptive (max ~20 characters)
Header Guards
- Format: UPPER_SNAKE_CASE with
_H suffix
- Include path in guard: (e.g.,
PROJECT_MODULE_FILE_H)
#ifndef USER_SERVICE_H
#define USER_SERVICE_H
#endif
Variable Naming
- Local variables: snake_case (e.g.,
user_count, buffer_size, is_valid)
- Global variables: snake_case with
g_ prefix (e.g., g_config, g_instance_count)
- Static variables: snake_case with
s_ prefix (e.g., s_initialized, s_cache)
- Pointers: Include
p or ptr suffix when helpful (e.g., user_ptr, buffer_p)
Constant/Macro Naming
- Macros: UPPER_SNAKE_CASE (e.g.,
MAX_BUFFER_SIZE, DEFAULT_TIMEOUT)
- Enum values: UPPER_SNAKE_CASE (e.g.,
STATUS_OK, ERROR_INVALID_INPUT)
- Compile-time constants: UPPER_SNAKE_CASE with
#define
Function Naming
- Functions: snake_case (e.g.,
calculate_total(), parse_input())
- Module prefix: Use module name prefix (e.g.,
user_create(), user_destroy())
- Static functions: snake_case, no prefix needed (internal to file)
- Init/cleanup pairs: Use
_init() and _cleanup() or _create() and _destroy()
Type Naming
- Structs: snake_case with
_t suffix or PascalCase (e.g., user_data_t or UserData)
- Typedefs: snake_case with
_t suffix (e.g., user_id_t, callback_fn_t)
- Enums: snake_case with
_e suffix for type (e.g., status_e)
Organization
- Header includes at top (system headers, then project headers)
- Macro definitions after includes
- Type definitions (structs, enums, typedefs)
- Function prototypes
- Global/static variable declarations
- Function implementations