# C Code Style Guide für CLI-Projekte ## 🔧 Allgemeines - **Zeichencodierung:** UTF-8 (ohne BOM) - **Zeilenenden:** LF (`\n`) – plattformunabhängig - **Einrückung:** 4 Leerzeichen (keine Tabs) - **Maximale Zeilenlänge:** 100 Zeichen (Ausnahme: ASCII-Bäume oder Formatstrings) ## 🧱 Präprozessor-Direktiven ```c #ifndef APP_H #define APP_H // Keine Einrückung bei #define, #ifdef, #endif // Kommentare nach #endif zur Orientierung bei größeren Headern #endif // APP_H ``` ## 📦 Header-Dateien (`.h`) - Funktionsprototypen sind **nicht eingerückt** - Kommentare über dem Prototyp mit Doxygen-Stil (`/** ... */`) - Header Guards oder `#pragma once` – aber nicht beides ```c /** * @brief Führt rekursive Verzeichnissuche durch. * * @param base_path Startpfad * @param depth Rekursionstiefe (nur zur Einrückung) */ void scan_directory(const char *base_path, int depth); ``` ## 🧠 Funktionen ```c int main(int argc, char *argv[]) { // Code beginnt eingerückt if (argc > 1) { printf("Pfad: %s\n", argv[1]); } return 0; } ``` - **Funktionsklammern immer öffnend auf derselben Zeile** - Immer mit Rückgabetyp (`void`, `int`, etc.) - Keine leeren Parameterlisten → `void` verwenden (`int foo(void)`) ## 🌳 Einrückung & Blöcke ```c if (ok) { mach_was(); } else { mach_anders(); } ``` - `if`, `else`, `while`, `for` – immer mit `{}` – auch bei einzeiligen Blöcken - Klammern auf derselben Zeile - Keine überflüssigen Leerzeilen innerhalb eines Blocks ## 🧾 Kommentare - Doxygen-kompatibel für alles, was extern verwendet wird - Inline-Kommentare nur bei **nicht sofort ersichtlicher Logik** ```c // Rekursion starten, wenn Verzeichnis scan_directory(sub_path, depth + 1); ``` ## 📁 Dateibenennung | Elementtyp | Beispiel | |------------------|------------------| | Header-Dateien | `app.h` | | Implementierung | `app.c` | | Main-Einstieg | `main.c` | | Konstanten/Makros| `config.h` | ## 📚 Optionaler Zusatz für Tools - Doxygen mit `Doxyfile` - `clang-format` für Einrückung und Formatierung - `cppcheck` für statische Analyse