treeScannerC/doc/code_style.md
Adam Skotarczak 4a9b5e77f3
v1.0.0
- C-Template für CLI Tools
2025-05-09 22:46:31 +02:00

93 lines
2.1 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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