# C i Maguyva: kaldgrafer til system- og embedded-kode

Canonical source: https://maguyva.ai/da/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 understøtter C med AST, symboler og graf, så AI-agenter kan følge funktioner, structs, includes og kaldere i system-, firmware- og bibliotekskode.

## Øjebliksbillede af understøttelse

- Niveau: AST- og symbolunderstøttelse
- Programmering
- Filendelser: .c, .h
- Rigtig AST-parsing til syntaksbevidst søgning og strukturel kontekst.
- Navngivne symboler understøtter semantisk opslag og krydsreferencer. Grafnavigation er tilgængelig, når relationsudtræk er aktiveret.
- Dette sprog bidrager med symboler og relationer til grafbaseret søgning; de understøttede kanttyper varierer med sprogets egne konstruktioner.
- Både AST-parsing og symboludtræk er tilgængelige.

## Bedst egnet til

- Firmware-, embedded- og styresystemteams, hvor en lille ændring i en delt funktion kan nå helt ud i hardwarestier.
- Langlivede C-biblioteker med offentlige headere, eksportmakroer og mange interne oversættelsesenheder.
- Agentunderstøttede reviews, hvor spørgsmålet er: "hvem kalder det her, og gennem hvilke headere?"

## Agent-arbejdsgange

- Finde alle, der kalder en funktion, før dens signatur eller fejlhåndtering ændres.
- Kortlægge, hvilke filer der inkluderer en header, og hvilke structs de bruger.
- Spore en forespørgsel fra en interrupthandler eller et indgangspunkt gennem de funktioner, den når.

## Hvorfor C har brug for en kaldgraf og ikke grep

C har ingen klasser eller moduler, der organiserer koden. Strukturen ligger i funktionskald, headere og structs, og det samme navn kan dukke op i kommentarer, makroer og strengliteraler. Eksport- og annotationsmakroer omslutter erklæringer, hvilket får værktøjer, der kun kan parse ren C, til at snuble. For en agent er kaldgrafen det sikre første skridt.

Maguyva bygger den graf, så en agent kan se, hvad en funktion når, og hvad der når den, før den foreslår en ændring.

## Hvad Maguyva udtrækker i C

Maguyva dækker `.c` og `.h`. Funktionsdefinitioner udtrækkes som symboler, og structs og unions kan vælges som typedefinitioner i strukturel søgning. `#include`-direktiver bliver til importrelationer.

Eksport- og synlighedsmakroer (mønstre som `FOO_API`, `DLLEXPORT` eller `LIBEXPORT`) og annotationsmakroer til trådsikkerhed (som `GUARDED_BY` og `REQUIRES`) maskeres før parsning, så erklæringer, der er omsluttet af dem, stadig parses som erklæringer. Kroppe i funktionslignende makroer parses; kroppe i objektlignende makroer gør ikke.

Grafen registrerer kald, includes, instansiering via sammensatte literaler, typereferencer, læsninger og skrivninger samt kontrolflow. Omkring 124 kald i C's standardbibliotek (`printf`, `malloc`, `free`, `memcpy`, `strlen` og lignende) filtreres fra relationerne, så projektets kode træder frem.

## Eksempler på prompts til agenter

- "Hvem kalder `uart_write`, direkte eller via andre funktioner?" (`dependency_search` incoming)
- "Hvilke filer inkluderer `config.h`, og hvilke af dens structs bruger de?" (`dependency_search`, derefter `find_symbol`)
- "Forklar, hvordan en pakke går fra modtage-interruptet til protokolparseren." (`get_task_context`)

## Kendte begrænsninger

- C har hverken klasser eller undtagelser, så relationer for nedarvning, interfaceimplementering, overskrivning, kast og fangst er markeret som ikke relevante.
- `.h` står på listerne over filendelser for C, C++ og Objective-C, så headere i træer med flere sprog deles mellem de profiler.
- Kald til filtrerede funktioner i standardbiblioteket er ikke kanter i grafen. Brug `text_pattern_search`, når du har brug for hver `malloc` eller `memcpy`.

## Næste skridt

Tilslut et repository med [hurtigstarten](/da/docs/quickstart), og se derefter understøttelsesmatricen på [kompatibilitetssiden](/da/docs/compatibility). Til C++-kode i samme træ kan du læse [guiden til C++](/da/languages/cpp).

## Motordetaljer

- C-understøttelsen dækker `.c` og `.h`. Funktionsdefinitioner er symboler, structs og unions er typedefinitioner, og `#include` bliver til en importrelation.
- Eksport-, synligheds- og trådsikkerhedsmakroer maskeres før parsning, så omsluttede erklæringer parses. Kroppe i funktionslignende makroer parses; kroppe i objektlignende gør ikke.
- Omkring 124 kald i standardbiblioteket som `printf`, `malloc` og `memcpy` filtreres fra. Relationer for nedarvning, overskrivning og undtagelser er markeret som ikke relevante.

## Nyttige MCP-indgange

- `find_symbol`: Brug det til et funktions- eller structnavn, når du har brug for definitionen og hver reference.
- `dependency_search`: Brug incoming-gennemløb på en delt funktion, før dens signatur eller fejlhåndtering ændres.
- `get_task_context`: Brug det til prompts som "forklar, hvordan en pakke går fra modtage-interruptet til protokolparseren".
