93 lines
2.1 KiB
Markdown
93 lines
2.1 KiB
Markdown
# 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
|