# C v Maguyva: grafy volání pro systémový a vestavěný kód

Canonical source: https://maguyva.ai/cs/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 podporuje C s AST, symboly a grafem, takže AI agenti sledují funkce, struktury, include a volající v systémovém kódu, firmwaru a knihovnách.

## Přehled podpory

- Úroveň: Podpora AST a symbolů
- Programování
- Přípony: .c, .h
- Skutečné parsování AST pro vyhledávání citlivé na syntaxi a strukturální kontext.
- Pojmenované symboly napájejí sémantické vyhledávání a křížové odkazy. Navigace v grafu je k dispozici, když je povolena extrakce vztahů.
- Tento jazyk přispívá symboly a vztahy do vyhledávání využívajícího graf; podporované typy hran se liší podle jeho nativních konstrukcí.
- K dispozici je parsování AST i extrakce symbolů.

## Nejlépe se hodí pro

- Týmy firmwaru, vestavěných systémů a operačních systémů, kde malá změna sdílené funkce může dosáhnout až k hardwarovým cestám.
- Dlouhodobé knihovny v C s veřejnými hlavičkami, exportními makry a mnoha interními překladovými jednotkami.
- Revize s podporou agentů, kde zní otázka: „kdo to volá a přes které hlavičky?“

## Workflow agentů

- Najít všechny volající funkce, než se změní její signatura nebo zpracování chyb.
- Zmapovat, které soubory vkládají hlavičku a které struktury používají.
- Sledovat požadavek od obsluhy přerušení nebo vstupního bodu přes funkce, kterých dosáhne.

## Proč C potřebuje graf volání, ne grep

C nemá třídy ani moduly, které by kód uspořádaly. Struktura žije ve voláních funkcí, hlavičkách a strukturách a stejný název se může objevit v komentářích, makrech i řetězcových literálech. Exportní a anotační makra obalují deklarace, na čemž klopýtají nástroje, které umí parsovat jen čisté C. Pro agenta je bezpečným prvním krokem graf volání.

Maguyva tento graf sestaví, aby agent viděl, kam funkce dosáhne a co dosáhne jí, ještě než navrhne změnu.

## Co Maguyva v C extrahuje

Maguyva pokrývá `.c` a `.h`. Definice funkcí se extrahují jako symboly a struktury a uniony lze ve strukturním vyhledávání vybrat jako definice typů. Direktivy `#include` se stávají vazbami importu.

Exportní makra a makra viditelnosti (vzory jako `FOO_API`, `DLLEXPORT` nebo `LIBEXPORT`) a anotační makra pro vláknovou bezpečnost (jako `GUARDED_BY` a `REQUIRES`) se před parsováním maskují, takže jimi obalené deklarace se dál rozpoznají jako deklarace. Těla makrofunkcí se parsují, těla objektových maker ne.

Graf zaznamenává volání, include, vytváření instancí pomocí složených literálů, odkazy na typy, čtení a zápisy a tok řízení. Přibližně 124 volání standardní knihovny C (`printf`, `malloc`, `free`, `memcpy`, `strlen` a podobné) se z vazeb odfiltruje, aby vynikl kód projektu.

## Ukázkové prompty pro agenty

- „Kdo volá `uart_write`, přímo nebo přes jiné funkce?“ (`dependency_search` incoming)
- „Které soubory vkládají `config.h` a které jeho struktury používají?“ (`dependency_search`, pak `find_symbol`)
- „Vysvětli, jak paket putuje od přerušení příjmu k parseru protokolu.“ (`get_task_context`)

## Známá omezení

- C nemá třídy ani výjimky, proto jsou vazby dědičnosti, implementace rozhraní, přepisu, vyhození a zachycení označeny jako nepoužitelné.
- `.h` je v seznamech přípon C, C++ i Objective-C, takže hlavičky ve vícejazyčných stromech tyto profily sdílejí.
- Volání odfiltrovaných funkcí standardní knihovny nejsou hranami grafu. Když potřebujete každé `malloc` nebo `memcpy`, použijte `text_pattern_search`.

## Další kroky

Připojte repozitář podle [rychlého startu](/cs/docs/quickstart) a pak si prohlédněte matici podpory na [stránce kompatibility](/cs/docs/compatibility). Pro kód v C++ ve stejném stromu si přečtěte [průvodce jazykem C++](/cs/languages/cpp).

## Podrobnosti enginu

- Podpora C pokrývá `.c` a `.h`. Definice funkcí jsou symboly, struktury a uniony jsou definice typů a `#include` se stává vazbou importu.
- Exportní makra, makra viditelnosti a anotační makra vláknové bezpečnosti se před parsováním maskují, takže obalené deklarace se parsují. Těla makrofunkcí se parsují, objektových maker ne.
- Přibližně 124 volání standardní knihovny, jako `printf`, `malloc` a `memcpy`, se odfiltruje. Vazby dědičnosti, přepisu a výjimek jsou označeny jako nepoužitelné.

## Užitečné vstupní body MCP

- `find_symbol`: Použijte s názvem funkce nebo struktury, když potřebujete definici a každý odkaz.
- `dependency_search`: Použijte procházení incoming na sdílené funkci, než změníte její signaturu nebo zpracování chyb.
- `get_task_context`: Použijte pro prompty typu „vysvětli, jak paket putuje od přerušení příjmu k parseru protokolu“.
