# C i Maguyva: anropsgrafer för system- och inbyggd kod

Canonical source: https://maguyva.ai/sv/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öder C med AST, symboler och graf, så att AI-agenter kan följa funktioner, structs, includes och anropare i system-, firmware- och bibliotekskod.

## Stödöversikt

- Nivå: Stöd för AST och symboler
- Programmering
- Filändelser: .c, .h
- Riktig AST-parsning för syntaxmedveten sökning och strukturell kontext.
- Namngivna symboler driver semantisk uppslagning och korsreferenser. Grafnavigering är tillgänglig när relationsextraktion är aktiverad.
- Det här språket bidrar med symboler och relationer till grafmedveten sökning; vilka kanttyper som stöds varierar med språkets inbyggda konstruktioner.
- Både AST-parsning och symbolextraktion är tillgängliga.

## Bäst lämpad för

- Firmware-, inbyggda system- och operativsystemsteam där en liten ändring i en delad funktion kan nå hårdvaruvägar.
- Långlivade C-bibliotek med publika headers, exportmakron och många interna översättningsenheter.
- Agentstödda granskningar där frågan är: "vem anropar det här, och via vilka headers?"

## Agentarbetsflöden

- Hitta alla som anropar en funktion innan dess signatur eller felhantering ändras.
- Kartlägga vilka filer som inkluderar en header och vilka structs de använder.
- Spåra en förfrågan från en avbrottshanterare eller ingångspunkt genom de funktioner den når.

## Varför C behöver en anropsgraf och inte grep

C har inga klasser eller moduler som organiserar koden. Strukturen finns i funktionsanrop, headers och structs, och samma namn kan dyka upp i kommentarer, makron och strängliteraler. Export- och annoteringsmakron omsluter deklarationer, vilket får verktyg som bara kan parsa ren C att snubbla. För en agent är anropsgrafen det säkra första steget.

Maguyva bygger den grafen så att en agent kan se vad en funktion når och vad som når den innan den föreslår en ändring.

## Vad Maguyva extraherar i C

Maguyva täcker `.c` och `.h`. Funktionsdefinitioner extraheras som symboler, och structs och unions kan väljas som typdefinitioner i strukturell sökning. `#include`-direktiv blir importrelationer.

Export- och synlighetsmakron (mönster som `FOO_API`, `DLLEXPORT` eller `LIBEXPORT`) och annoteringsmakron för trådsäkerhet (som `GUARDED_BY` och `REQUIRES`) maskeras före parsning, så att deklarationer som omsluts av dem fortfarande parsas som deklarationer. Kroppar i funktionsliknande makron parsas; kroppar i objektliknande makron gör det inte.

Grafen registrerar anrop, includes, instansiering via sammansatta literaler, typreferenser, läsningar och skrivningar samt kontrollflöde. Omkring 124 anrop i C:s standardbibliotek (`printf`, `malloc`, `free`, `memcpy`, `strlen` och liknande) filtreras bort ur relationerna så att projektets kod syns.

## Exempel på prompter för agenter

- "Vem anropar `uart_write`, direkt eller via andra funktioner?" (`dependency_search` incoming)
- "Vilka filer inkluderar `config.h`, och vilka av dess structs använder de?" (`dependency_search`, sedan `find_symbol`)
- "Förklara hur ett paket går från mottagningsavbrottet till protokollparsern." (`get_task_context`)

## Kända begränsningar

- C har varken klasser eller undantag, så relationer för arv, gränssnittsimplementation, överskrivning, kast och fångst är markerade som ej tillämpliga.
- `.h` finns i filändelselistorna för C, C++ och Objective-C, så headers i flerspråkiga träd delas mellan de profilerna.
- Anrop till filtrerade funktioner i standardbiblioteket är inte kanter i grafen. Använd `text_pattern_search` när du behöver varje `malloc` eller `memcpy`.

## Nästa steg

Anslut ett repo med [snabbstarten](/sv/docs/quickstart) och kontrollera sedan stödmatrisen på [kompatibilitetssidan](/sv/docs/compatibility). För C++-kod i samma träd, läs [guiden för C++](/sv/languages/cpp).

## Motordetaljer

- C-stödet täcker `.c` och `.h`. Funktionsdefinitioner är symboler, structs och unions är typdefinitioner, och `#include` blir en importrelation.
- Export-, synlighets- och trådsäkerhetsmakron maskeras före parsning, så att omslutna deklarationer parsas. Kroppar i funktionsliknande makron parsas; kroppar i objektliknande gör det inte.
- Omkring 124 anrop i standardbiblioteket som `printf`, `malloc` och `memcpy` filtreras bort. Relationer för arv, överskrivning och undantag är markerade som ej tillämpliga.

## Användbara MCP-ingångar

- `find_symbol`: Använd det för ett funktions- eller structnamn när du behöver definitionen och varje referens.
- `dependency_search`: Använd incoming-traversering på en delad funktion innan dess signatur eller felhantering ändras.
- `get_task_context`: Använd det för prompter som "förklara hur ett paket går från mottagningsavbrottet till protokollparsern".
