# C i Maguyva: kallgrafer for system- og innebygd kode

Canonical source: https://maguyva.ai/nb/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 støtter C med AST, symboler og graf, slik at AI-agenter kan følge funksjoner, structs, includes og kallere i system-, fastvare- og bibliotekskode.

## Støtteoversikt

- Nivå: AST- og symbolstøtte
- Programmering
- Filendelser: .c, .h
- Ekte AST-analyse for syntaksbevisst søk og strukturell kontekst.
- Navngitte symboler mater semantisk oppslag og kryssreferanser. Grafnavigasjon er tilgjengelig når relasjonsuttrekk er aktivert.
- Dette språket bidrar med symboler og relasjoner til grafbasert søk; støttede kanttyper varierer med språkets egne konstruksjoner.
- Både AST-analyse og symboluttrekk er tilgjengelige.

## Best egnet

- Fastvare-, innebygd- og operativsystemteam der en liten endring i en delt funksjon kan nå helt ut i maskinvarestier.
- Langlivede C-biblioteker med offentlige headere, eksportmakroer og mange interne oversettelsesenheter.
- Agentstøttede gjennomganger der spørsmålet er: «hvem kaller dette, og gjennom hvilke headere?»

## Agent-arbeidsflyter

- Finne alle som kaller en funksjon før signaturen eller feilhåndteringen endres.
- Kartlegge hvilke filer som inkluderer en header, og hvilke structs de bruker.
- Spore en forespørsel fra en avbruddshåndterer eller et inngangspunkt gjennom funksjonene den når.

## Hvorfor C trenger en kallgraf og ikke grep

C har ingen klasser eller moduler som organiserer koden. Strukturen ligger i funksjonskall, headere og structs, og det samme navnet kan dukke opp i kommentarer, makroer og strengliteraler. Eksport- og annoteringsmakroer omslutter deklarasjoner, noe som får verktøy som bare kan parse ren C, til å snuble. For en agent er kallgrafen det trygge første steget.

Maguyva bygger denne grafen, slik at en agent kan se hva en funksjon når og hva som når den, før den foreslår en endring.

## Hva Maguyva henter ut i C

Maguyva dekker `.c` og `.h`. Funksjonsdefinisjoner hentes ut som symboler, og structs og unions kan velges som typedefinisjoner i strukturelt søk. `#include`-direktiver blir importrelasjoner.

Eksport- og synlighetsmakroer (mønstre som `FOO_API`, `DLLEXPORT` eller `LIBEXPORT`) og annoteringsmakroer for trådsikkerhet (som `GUARDED_BY` og `REQUIRES`) maskeres før parsing, slik at deklarasjoner de omslutter fortsatt parses som deklarasjoner. Kropper i funksjonslignende makroer parses; kropper i objektlignende makroer gjør det ikke.

Grafen registrerer kall, includes, instansiering via sammensatte literaler, typereferanser, lesinger og skrivinger samt kontrollflyt. Rundt 124 kall i Cs standardbibliotek (`printf`, `malloc`, `free`, `memcpy`, `strlen` og lignende) filtreres ut av relasjonene, slik at prosjektkoden kommer tydelig frem.

## Eksempler på prompter for agenter

- «Hvem kaller `uart_write`, direkte eller via andre funksjoner?» (`dependency_search` incoming)
- «Hvilke filer inkluderer `config.h`, og hvilke av structene bruker de?» (`dependency_search`, deretter `find_symbol`)
- «Forklar hvordan en pakke går fra mottaksavbruddet til protokollparseren.» (`get_task_context`)

## Kjente begrensninger

- C har verken klasser eller unntak, så relasjoner for arv, grensesnittimplementasjon, overstyring, kasting og fanging er merket som ikke aktuelle.
- `.h` står på listene over filendelser for C, C++ og Objective-C, så headere i flerspråklige trær deles mellom disse profilene.
- Kall til filtrerte funksjoner i standardbiblioteket er ikke kanter i grafen. Bruk `text_pattern_search` når du trenger hver `malloc` eller `memcpy`.

## Neste steg

Koble til et repositorium med [hurtigstarten](/nb/docs/quickstart), og se deretter støttematrisen på [kompatibilitetssiden](/nb/docs/compatibility). For C++-kode i samme tre bør du lese [veiledningen for C++](/nb/languages/cpp).

## Motordetaljer

- C-støtten dekker `.c` og `.h`. Funksjonsdefinisjoner er symboler, structs og unions er typedefinisjoner, og `#include` blir en importrelasjon.
- Eksport-, synlighets- og trådsikkerhetsmakroer maskeres før parsing, så omsluttede deklarasjoner parses. Kropper i funksjonslignende makroer parses; kropper i objektlignende gjør det ikke.
- Rundt 124 kall i standardbiblioteket som `printf`, `malloc` og `memcpy` filtreres ut. Relasjoner for arv, overstyring og unntak er merket som ikke aktuelle.

## Nyttige MCP-inngangspunkter

- `find_symbol`: Bruk det for et funksjons- eller structnavn når du trenger definisjonen og hver referanse.
- `dependency_search`: Bruk incoming-traversering på en delt funksjon før signaturen eller feilhåndteringen endres.
- `get_task_context`: Bruk det til prompter som «forklar hvordan en pakke går fra mottaksavbruddet til protokollparseren».
