# C in Maguyva: aanroepgrafen voor systeem- en embedded code

Canonical source: https://maguyva.ai/nl/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 ondersteunt C met AST, symbolen en graaf, zodat AI-agents functies, structs, includes en aanroepers volgen in systeem-, firmware- en bibliotheekcode.

## Ondersteuningsoverzicht

- Tier: AST- en symboolondersteuning
- Programmeren
- Extensies: .c, .h
- Echte AST-parsing voor syntaxbewust zoeken en structurele context.
- Benoemde symbolen voeden semantische lookup en kruisverwijzingen. Graafnavigatie is beschikbaar wanneer relatie-extractie is ingeschakeld.
- Deze taal draagt symbolen en relaties bij aan graafbewust zoeken; ondersteunde kanttypen variëren met de eigen constructies van de taal.
- Zowel AST-parsing als symboolextractie zijn beschikbaar.

## Beste toepassing

- Firmware-, embedded- en besturingssysteemteams waar een kleine wijziging in een gedeelde functie tot in hardwarepaden kan reiken.
- Langlevende C-bibliotheken met publieke headers, exportmacro's en veel interne vertaaleenheden.
- Door agents ondersteunde reviews waarbij de vraag is: "wie roept dit aan, en via welke headers?"

## Agentworkflows

- Elke aanroeper van een functie vinden voordat de signatuur of foutafhandeling verandert.
- In kaart brengen welke bestanden een header includen en welke structs ze gebruiken.
- Een verzoek volgen vanaf een interrupthandler of startpunt door de functies die het bereikt.

## Waarom C een aanroepgraaf nodig heeft in plaats van grep

C heeft geen klassen of modules om code te ordenen. De structuur zit in functieaanroepen, headers en structs, en dezelfde naam kan opduiken in commentaar, macro's en stringliterals. Export- en annotatiemacro's omhullen declaraties, waardoor tools die alleen puur C kunnen parsen struikelen. Voor een agent is de aanroepgraaf de veilige eerste stap.

Maguyva bouwt die graaf, zodat een agent kan zien wat een functie bereikt en wat haar bereikt voordat hij een wijziging voorstelt.

## Wat Maguyva in C extraheert

Maguyva dekt `.c` en `.h`. Functiedefinities worden als symbolen geëxtraheerd, en structs en unions zijn in structureel zoeken te selecteren als typedefinities. `#include`-directives worden importrelaties.

Export- en zichtbaarheidsmacro's (patronen zoals `FOO_API`, `DLLEXPORT` of `LIBEXPORT`) en annotatiemacro's voor thread safety (zoals `GUARDED_BY` en `REQUIRES`) worden vóór het parsen gemaskeerd, zodat declaraties die erin zijn verpakt nog steeds als declaraties worden geparseerd. Bodies van functieachtige macro's worden geparseerd; die van objectachtige macro's niet.

De graaf legt aanroepen vast, includes, instantiëring via compound literals, typeverwijzingen, lees- en schrijfacties, en control flow. Ongeveer 124 aanroepen uit de C-standaardbibliotheek (`printf`, `malloc`, `free`, `memcpy`, `strlen` en vergelijkbare) worden uit de relaties gefilterd, zodat de projectcode opvalt.

## Voorbeeldprompts voor agents

- "Wie roept `uart_write` aan, rechtstreeks of via andere functies?" (`dependency_search` incoming)
- "Welke bestanden includen `config.h`, en welke van zijn structs gebruiken ze?" (`dependency_search`, daarna `find_symbol`)
- "Leg uit hoe een pakket van de ontvangstinterrupt naar de protocolparser gaat." (`get_task_context`)

## Bekende beperkingen

- C heeft geen klassen of exceptions, dus relaties voor overerving, interface-implementatie, override, throw en catch zijn gemarkeerd als niet van toepassing.
- `.h` staat in de extensielijsten van C, C++ en Objective-C, dus headers in bomen met meerdere talen worden door die profielen gedeeld.
- Aanroepen van gefilterde functies uit de standaardbibliotheek zijn geen randen in de graaf. Gebruik `text_pattern_search` wanneer je elke `malloc` of `memcpy` nodig hebt.

## Volgende stappen

Koppel een repository via de [snelstart](/nl/docs/quickstart) en bekijk daarna de ondersteuningsmatrix op de [compatibiliteitspagina](/nl/docs/compatibility). Lees voor C++-code in dezelfde boom de [C++-gids](/nl/languages/cpp).

## Enginedetails

- C-ondersteuning dekt `.c` en `.h`. Functiedefinities zijn symbolen, structs en unions zijn typedefinities, en `#include` wordt een importrelatie.
- Export-, zichtbaarheids- en thread-safety-annotatiemacro's worden vóór het parsen gemaskeerd, zodat omhulde declaraties worden geparseerd. Bodies van functieachtige macro's worden geparseerd; die van objectachtige niet.
- Ongeveer 124 aanroepen uit de standaardbibliotheek zoals `printf`, `malloc` en `memcpy` worden gefilterd. Relaties voor overerving, override en exceptions zijn gemarkeerd als niet van toepassing.

## Nuttige MCP-instappunten

- `find_symbol`: Gebruik het voor een functie- of structnaam wanneer je de definitie en elke verwijzing nodig hebt.
- `dependency_search`: Gebruik incoming-traversal op een gedeelde functie voordat de signatuur of foutafhandeling verandert.
- `get_task_context`: Gebruik het voor prompts zoals "leg uit hoe een pakket van de ontvangstinterrupt naar de protocolparser gaat".
