# C у Maguyva: графи викликів для системного та вбудованого коду

Canonical source: https://maguyva.ai/uk/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 підтримує C з AST, символами та графом, щоб ШІ-агенти відстежували функції, структури, include та тих, хто викликає, у системному коді, прошивках і бібліотеках.

## Знімок підтримки

- Рівень: Підтримка AST і символів
- Програмування
- Розширення: .c, .h
- Справжній розбір AST для пошуку з урахуванням синтаксису та структурного контексту.
- Іменовані символи забезпечують семантичний пошук і перехресні посилання. Навігація графом доступна, коли ввімкнено видобування зв’язків.
- Ця мова додає символи та зв’язки до пошуку з урахуванням графа; підтримувані типи ребер залежать від притаманних їй конструкцій.
- Доступні як розбір AST, так і видобування символів.

## Найкраще підходить

- Команди прошивок, вбудованих систем і операційних систем, де невелика зміна спільної функції може дійти до апаратних шляхів.
- Довговічні бібліотеки на C з публічними заголовками, макросами експорту й безліччю внутрішніх одиниць трансляції.
- Рев'ю за участі агентів, де питання звучить так: «хто це викликає і через які заголовки?»

## Робочі процеси агента

- Знайти всіх, хто викликає функцію, перш ніж змінювати її сигнатуру чи обробку помилок.
- Скласти карту файлів, що підключають заголовок, і структур, які вони використовують.
- Простежити запит від обробника переривання чи точки входу крізь функції, до яких він доходить.

## Чому C потрібен граф викликів, а не grep

У C немає класів і модулів, які впорядковували б код. Структура живе у викликах функцій, заголовках і структурах, а та сама назва може траплятися в коментарях, макросах і рядкових літералах. Макроси експорту й анотацій обгортають оголошення, і інструменти, що вміють розбирати лише чистий C, на них спотикаються. Для агента безпечний перший крок — граф викликів.

Maguyva будує цей граф, щоб агент бачив, до чого доходить функція і що доходить до неї, перш ніж запропонувати зміну.

## Що Maguyva витягує з C

Maguyva охоплює `.c` і `.h`. Визначення функцій витягуються як символи, а структури й об'єднання можна вибрати як визначення типів у структурному пошуку. Директиви `#include` стають зв'язками імпорту.

Макроси експорту й видимості (шаблони на кшталт `FOO_API`, `DLLEXPORT` або `LIBEXPORT`) і макроси анотацій потокобезпеки (наприклад, `GUARDED_BY` і `REQUIRES`) маскуються перед розбором, тож обгорнуті ними оголошення й надалі розпізнаються як оголошення. Тіла функціональних макросів розбираються, тіла об'єктних макросів — ні.

Граф фіксує виклики, include, створення екземплярів через складені літерали, посилання на типи, читання й записи, а також потік керування. Близько 124 викликів стандартної бібліотеки C (`printf`, `malloc`, `free`, `memcpy`, `strlen` тощо) відфільтровуються зі зв'язків, щоб код проєкту було видно.

## Приклади промптів для агентів

- «Хто викликає `uart_write` — напряму чи через інші функції?» (`dependency_search` incoming)
- «Які файли підключають `config.h` і які його структури використовують?» (`dependency_search`, потім `find_symbol`)
- «Поясни, як пакет проходить від переривання прийому до парсера протоколу.» (`get_task_context`)

## Відомі обмеження

- У C немає класів і винятків, тому зв'язки успадкування, реалізації інтерфейсів, перевизначення, викидання й перехоплення позначено як незастосовні.
- `.h` входить до списків розширень C, C++ і Objective-C, тому заголовки в багатомовних деревах спільні для цих профілів.
- Виклики відфільтрованих функцій стандартної бібліотеки не стають ребрами графа. Якщо потрібен кожен `malloc` чи `memcpy`, використовуйте `text_pattern_search`.

## Наступні кроки

Під'єднайте репозиторій за [швидким стартом](/uk/docs/quickstart), потім перегляньте матрицю підтримки на [сторінці сумісності](/uk/docs/compatibility). Для коду на C++ у тому самому дереві прочитайте [посібник із C++](/uk/languages/cpp).

## Деталі рушія

- Підтримка C охоплює `.c` і `.h`. Визначення функцій — символи, структури й об'єднання — визначення типів, а `#include` стає зв'язком імпорту.
- Макроси експорту, видимості та анотацій потокобезпеки маскуються перед розбором, тож обгорнуті оголошення розбираються. Тіла функціональних макросів розбираються, об'єктних — ні.
- Близько 124 викликів стандартної бібліотеки, як-от `printf`, `malloc` і `memcpy`, відфільтровуються. Зв'язки успадкування, перевизначення та винятків позначено як незастосовні.

## Корисні точки входу MCP

- `find_symbol`: Використовуйте з назвою функції чи структури, коли потрібні визначення й усі посилання.
- `dependency_search`: Використовуйте обхід incoming для спільної функції перед зміною її сигнатури чи обробки помилок.
- `get_task_context`: Використовуйте для промптів на кшталт «поясни, як пакет проходить від переривання прийому до парсера протоколу».
