# C w Maguyva: grafy wywołań dla kodu systemowego i wbudowanego

Canonical source: https://maguyva.ai/pl/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 obsługuje C przez AST, symbole i graf, dzięki czemu agenci AI śledzą funkcje, struktury, include'y i wywołujących w kodzie systemowym, firmware i bibliotekach.

## Migawka wsparcia

- Poziom: Obsługa AST i symboli
- Programowanie
- Rozszerzenia: .c, .h
- Prawdziwe parsowanie AST dla wyszukiwania świadomego składni i kontekstu strukturalnego.
- Nazwane symbole zasilają wyszukiwanie semantyczne i wzajemne odwołania. Nawigacja po grafie jest dostępna po włączeniu ekstrakcji relacji.
- Ten język dostarcza symbole i relacje do wyszukiwania uwzględniającego graf; obsługiwane typy krawędzi zależą od jego rodzimych konstrukcji.
- Dostępne są zarówno parsowanie AST, jak i ekstrakcja symboli.

## Najlepsze dopasowanie

- Zespoły firmware, systemów wbudowanych i systemów operacyjnych, gdzie mała zmiana we współdzielonej funkcji może sięgnąć ścieżek sprzętowych.
- Długowieczne biblioteki C z publicznymi nagłówkami, makrami eksportu i wieloma wewnętrznymi jednostkami translacji.
- Przeglądy wspierane przez agentów, w których pytanie brzmi: „kto to wywołuje i przez które nagłówki?”

## Workflow agentów

- Znaleźć wszystkich wywołujących funkcję przed zmianą jej sygnatury lub obsługi błędów.
- Zmapować, które pliki dołączają nagłówek i których struktur używają.
- Prześledzić żądanie od procedury obsługi przerwania lub punktu wejścia przez funkcje, do których dociera.

## Dlaczego C potrzebuje grafu wywołań, a nie grepa

C nie ma klas ani modułów, które porządkowałyby kod. Struktura żyje w wywołaniach funkcji, nagłówkach i strukturach, a ta sama nazwa może pojawić się w komentarzach, makrach i literałach tekstowych. Makra eksportu i adnotacji otaczają deklaracje, przez co potykają się narzędzia, które potrafią parsować tylko czyste C. Dla agenta bezpiecznym pierwszym krokiem jest graf wywołań.

Maguyva buduje ten graf, aby agent widział, do czego dociera funkcja i co dociera do niej, zanim zaproponuje zmianę.

## Co Maguyva wyodrębnia w C

Maguyva obejmuje `.c` i `.h`. Definicje funkcji są wyodrębniane jako symbole, a struktury i unie można wybrać jako definicje typów w wyszukiwaniu strukturalnym. Dyrektywy `#include` stają się relacjami importu.

Makra eksportu i widoczności (wzorce takie jak `FOO_API`, `DLLEXPORT` czy `LIBEXPORT`) oraz makra adnotacji bezpieczeństwa wątków (takie jak `GUARDED_BY` i `REQUIRES`) są maskowane przed parsowaniem, więc otoczone nimi deklaracje nadal są rozpoznawane jako deklaracje. Treści makr funkcyjnych są parsowane; treści makr obiektowych nie.

Graf zapisuje wywołania, include'y, tworzenie instancji przez literały złożone, odwołania do typów, odczyty i zapisy oraz przepływ sterowania. Około 124 wywołań biblioteki standardowej C (`printf`, `malloc`, `free`, `memcpy`, `strlen` i podobne) jest filtrowanych z relacji, aby wyróżnić kod projektu.

## Przykładowe prompty dla agentów

- „Kto wywołuje `uart_write`, bezpośrednio lub przez inne funkcje?” (`dependency_search` incoming)
- „Które pliki dołączają `config.h` i których jego struktur używają?” (`dependency_search`, potem `find_symbol`)
- „Wyjaśnij, jak pakiet przechodzi od przerwania odbioru do parsera protokołu.” (`get_task_context`)

## Znane ograniczenia

- C nie ma klas ani wyjątków, więc relacje dziedziczenia, implementacji interfejsu, nadpisania, rzucania i przechwytywania są oznaczone jako nie dotyczy.
- `.h` występuje na listach rozszerzeń C, C++ i Objective-C, więc nagłówki w drzewach wielojęzycznych są współdzielone między tymi profilami.
- Wywołania odfiltrowanych funkcji biblioteki standardowej nie są krawędziami grafu. Gdy potrzebujesz każdego `malloc` lub `memcpy`, użyj `text_pattern_search`.

## Kolejne kroki

Podłącz repozytorium za pomocą [szybkiego startu](/pl/docs/quickstart), a potem sprawdź macierz obsługi na [stronie zgodności](/pl/docs/compatibility). Dla kodu C++ w tym samym drzewie przeczytaj [przewodnik po C++](/pl/languages/cpp).

## Szczegóły silnika

- Obsługa C obejmuje `.c` i `.h`. Definicje funkcji są symbolami, struktury i unie definicjami typów, a `#include` staje się relacją importu.
- Makra eksportu, widoczności i adnotacji bezpieczeństwa wątków są maskowane przed parsowaniem, więc otoczone deklaracje są parsowane. Treści makr funkcyjnych są parsowane; makr obiektowych nie.
- Około 124 wywołań biblioteki standardowej, takich jak `printf`, `malloc` i `memcpy`, jest filtrowanych. Relacje dziedziczenia, nadpisania i wyjątków są oznaczone jako nie dotyczy.

## Przydatne punkty wejścia MCP

- `find_symbol`: Używaj go z nazwą funkcji lub struktury, gdy potrzebujesz definicji i każdego odwołania.
- `dependency_search`: Użyj przejścia incoming na współdzielonej funkcji przed zmianą jej sygnatury lub obsługi błędów.
- `get_task_context`: Używaj go do promptów typu „wyjaśnij, jak pakiet przechodzi od przerwania odbioru do parsera protokołu”.
