# C in Maguyva: Aufrufgraphen für System- und Embedded-Code

Canonical source: https://maguyva.ai/de/languages/c

License: text under [CC BY 4.0](https://creativecommons.org/licenses/by/4.0/); code samples under [MIT-0](https://opensource.org/license/mit-0); the Maguyva name, logos, brand assets and other code are not covered. Details: [maguyva.ai/license](https://maguyva.ai/license).

Maguyva unterstützt C mit AST, Symbolen und Graph, damit KI-Agenten Funktionen, Structs, Includes und Aufrufer in System-, Firmware- und Bibliothekscode verfolgen.

## Unterstützungsüberblick

- Stufe: AST- und Symbol-Support
- Programmierung
- Dateiendungen: .c, .h
- Echtes AST-Parsing für syntaxbewusste Suche und strukturellen Kontext.
- Benannte Symbole speisen semantisches Lookup und Cross-Referenzierung. Graph-Navigation ist verfügbar, wenn die Beziehungsextraktion aktiviert ist.
- Diese Sprache liefert Symbole und Beziehungen für die graphgestützte Suche; die unterstützten Kantentypen variieren je nach nativen Konstrukten der Sprache.
- AST-Parsing und Symbolextraktion sind beide verfügbar.

## Am besten geeignet

- Firmware-, Embedded- und Betriebssystem-Teams, bei denen eine kleine Änderung an einer gemeinsamen Funktion bis in Hardwarepfade reicht.
- Langlebige C-Bibliotheken mit öffentlichen Headern, Export-Makros und vielen internen Übersetzungseinheiten.
- Agentengestützte Reviews, bei denen die Frage lautet: „Wer ruft das auf, und über welche Header?“

## Agentenabläufe

- Jeden Aufrufer einer Funktion finden, bevor sich ihre Signatur oder Fehlerbehandlung ändert.
- Erfassen, welche Dateien einen Header einbinden und welche Structs sie verwenden.
- Eine Anfrage von einem Interrupt-Handler oder Einstiegspunkt aus durch die Funktionen verfolgen, die sie erreicht.

## Warum C einen Aufrufgraphen braucht statt grep

C hat keine Klassen oder Module, die den Code ordnen. Die Struktur steckt in Funktionsaufrufen, Headern und Structs, und derselbe Name kann in Kommentaren, Makros und String-Literalen auftauchen. Export- und Annotations-Makros umschließen Deklarationen, was Werkzeuge ins Stolpern bringt, die nur reines C parsen. Für einen Agenten ist der sichere erste Schritt der Aufrufgraph.

Maguyva baut diesen Graphen auf, damit ein Agent sehen kann, was eine Funktion erreicht und wovon sie erreicht wird, bevor er eine Änderung vorschlägt.

## Was Maguyva in C extrahiert

Maguyva deckt `.c` und `.h` ab. Funktionsdefinitionen werden als Symbole extrahiert, und Structs und Unions lassen sich in der Struktursuche als Typdefinitionen auswählen. `#include`-Direktiven werden zu Importbeziehungen.

Export- und Sichtbarkeitsmakros (Muster wie `FOO_API`, `DLLEXPORT` oder `LIBEXPORT`) und Thread-Safety-Annotationsmakros (etwa `GUARDED_BY` und `REQUIRES`) werden vor dem Parsen maskiert, sodass damit umschlossene Deklarationen weiterhin als Deklarationen geparst werden. Rümpfe funktionsartiger Makros werden geparst, Rümpfe objektartiger Makros nicht.

Der Graph erfasst Aufrufe, Includes, Instanziierung über Compound Literals, Typreferenzen, Lese- und Schreibzugriffe sowie Kontrollfluss. Etwa 124 Aufrufe der C-Standardbibliothek (`printf`, `malloc`, `free`, `memcpy`, `strlen` und ähnliche) werden aus den Beziehungen gefiltert, damit der Projektcode hervortritt.

## Beispiel-Prompts für Agenten

- „Wer ruft `uart_write` auf, direkt oder über andere Funktionen?“ (`dependency_search` incoming)
- „Welche Dateien binden `config.h` ein, und welche seiner Structs verwenden sie?“ (`dependency_search`, dann `find_symbol`)
- „Erkläre, wie ein Paket vom Empfangs-Interrupt zum Protokollparser gelangt.“ (`get_task_context`)

## Bekannte Grenzen

- C hat weder Klassen noch Ausnahmen, daher sind Beziehungen für Vererbung, Interface-Implementierung, Override, Throw und Catch als nicht anwendbar markiert.
- `.h` steht in den Listen der Dateiendungen von C, C++ und Objective-C, daher teilen sich diese Profile Header in gemischtsprachigen Bäumen.
- Aufrufe gefilterter Funktionen der Standardbibliothek sind keine Graphkanten. Verwende `text_pattern_search`, wenn du jedes `malloc` oder `memcpy` brauchst.

## Nächste Schritte

Verbinde ein Repository über den [Schnellstart](/de/docs/quickstart) und prüfe dann die Unterstützungsmatrix auf der [Kompatibilitätsseite](/de/docs/compatibility). Für C++-Code im selben Baum lies den [C++-Leitfaden](/de/languages/cpp).

## Engine-Einordnung

- Die C-Unterstützung deckt `.c` und `.h` ab. Funktionsdefinitionen sind Symbole, Structs und Unions sind Typdefinitionen, und `#include` wird zu einer Importbeziehung.
- Export-, Sichtbarkeits- und Thread-Safety-Annotationsmakros werden vor dem Parsen maskiert, sodass umschlossene Deklarationen geparst werden. Rümpfe funktionsartiger Makros werden geparst, die objektartiger nicht.
- Etwa 124 Aufrufe der Standardbibliothek wie `printf`, `malloc` und `memcpy` werden gefiltert. Vererbungs-, Override- und Ausnahmebeziehungen sind als nicht anwendbar markiert.

## Nützliche MCP-Einstiegspunkte

- `find_symbol`: Nutz es für einen Funktions- oder Struct-Namen, wenn du die Definition und jede Referenz brauchst.
- `dependency_search`: Nutz die eingehende Traversierung auf einer gemeinsamen Funktion, bevor du ihre Signatur oder Fehlerbehandlung änderst.
- `get_task_context`: Nutz es für Prompts wie „erkläre, wie ein Paket vom Empfangs-Interrupt zum Protokollparser gelangt“.
