# C dalam Maguyva: graf panggilan untuk kod sistem dan terbenam

Canonical source: https://maguyva.ai/ms/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 menyokong C dengan AST, simbol dan graf, supaya ejen AI boleh menjejak fungsi, struct, include dan pemanggil dalam kod sistem, perisian tegar dan pustaka.

## Gambaran sokongan

- Peringkat: Sokongan AST dan simbol
- Pengaturcaraan
- Sambungan fail: .c, .h
- Penghuraian AST sebenar untuk carian sedar-sintaks dan konteks struktur.
- Simbol bernama menyokong carian semantik dan rujukan silang. Navigasi graf tersedia apabila pengekstrakan hubungan didayakan.
- Bahasa ini menyumbang simbol dan hubungan kepada carian berasaskan graf; jenis edge yang disokong berbeza mengikut binaan aslinya.
- Penghuraian AST dan pengekstrakan simbol kedua-duanya tersedia.

## Paling sesuai

- Pasukan perisian tegar, sistem terbenam dan sistem pengendalian, tempat perubahan kecil pada fungsi kongsi boleh merebak ke laluan perkakasan.
- Pustaka C berusia panjang dengan pengepala awam, makro eksport dan banyak unit terjemahan dalaman.
- Semakan dibantu ejen, dengan soalan: “siapa yang memanggil ini, dan melalui pengepala mana?”

## Aliran kerja ejen

- Mencari setiap pemanggil sesuatu fungsi sebelum tandatangan atau pengendalian ralatnya berubah.
- Memetakan fail yang menyertakan sesuatu pengepala dan struct yang digunakannya.
- Menjejak permintaan daripada pengendali sampukan atau titik masuk melalui fungsi yang dicapainya.

## Mengapa C memerlukan graf panggilan, bukan grep

C tiada kelas atau modul untuk menyusun kod. Struktur tinggal dalam panggilan fungsi, pengepala dan struct, dan nama yang sama boleh muncul dalam ulasan, makro dan literal rentetan. Makro eksport dan anotasi membalut pengisytiharan, lalu alat yang hanya menghurai C tulen tersadung. Bagi ejen, langkah pertama yang selamat ialah graf panggilan.

Maguyva membina graf ini, supaya ejen dapat melihat ke mana sesuatu fungsi sampai dan apa yang sampai kepadanya sebelum mencadangkan perubahan.

## Apa yang diekstrak oleh Maguyva daripada C

Maguyva meliputi `.c` dan `.h`. Definisi fungsi diekstrak sebagai simbol, dan struct serta union boleh dipilih sebagai definisi jenis dalam carian berstruktur. Arahan `#include` menjadi hubungan import.

Makro eksport dan keterlihatan (corak seperti `FOO_API`, `DLLEXPORT` atau `LIBEXPORT`) dan makro anotasi keselamatan bebenang (seperti `GUARDED_BY` dan `REQUIRES`) ditopengkan sebelum penghuraian, supaya pengisytiharan yang dibalutnya dihuraikan sebagai pengisytiharan biasa. Badan makro seperti fungsi dihuraikan; badan makro seperti objek tidak.

Graf merekodkan panggilan, include, penginstansian melalui literal majmuk, rujukan jenis, bacaan dan tulisan, serta aliran kawalan. Kira-kira 124 panggilan pustaka standard C (`printf`, `malloc`, `free`, `memcpy`, `strlen` dan seumpamanya) ditapis daripada hubungan, supaya kod projek lebih menonjol.

## Contoh gesaan ejen

- "Siapa yang memanggil `uart_write`, secara langsung atau melalui fungsi lain?" (`dependency_search` arah masuk)
- "Fail mana yang menyertakan `config.h`, dan struct mana yang digunakan?" (`dependency_search`, kemudian `find_symbol`)
- "Terangkan cara paket bergerak daripada sampukan penerimaan ke penghurai protokol." (`get_task_context`)

## Had yang diketahui

- C tiada kelas dan tiada pengecualian, jadi hubungan pewarisan, pelaksanaan antara muka, penggantian, lontaran dan tangkapan ditanda sebagai tidak berkenaan.
- `.h` muncul dalam senarai sambungan C, C++ dan Objective-C, jadi pengepala dalam pepohon kod berbilang bahasa dibahagikan antara profil-profil ini.
- Panggilan kepada fungsi pustaka standard yang ditapis bukan tepi graf. Gunakan `text_pattern_search` apabila anda memerlukan setiap `malloc` atau `memcpy`.

## Langkah seterusnya

Sambungkan repositori dengan [panduan permulaan pantas](/ms/docs/quickstart), kemudian semak matriks sokongan di [halaman keserasian](/ms/docs/compatibility). Untuk kod C++ dalam pepohon yang sama, baca [panduan C++](/ms/languages/cpp).

## Butiran enjin

- Sokongan C meliputi `.c` dan `.h`. Definisi fungsi ialah simbol, struct dan union ialah definisi jenis, dan `#include` menjadi hubungan import.
- Makro eksport, keterlihatan dan anotasi keselamatan bebenang ditopengkan sebelum penghuraian, supaya pengisytiharan yang dibalut tetap dihuraikan. Badan makro seperti fungsi dihuraikan; yang seperti objek tidak.
- Kira-kira 124 panggilan pustaka standard seperti `printf`, `malloc` dan `memcpy` ditapis. Hubungan pewarisan, penggantian dan pengecualian ditanda sebagai tidak berkenaan.

## Titik masuk MCP yang berguna

- `find_symbol`: Gunakan dengan nama fungsi atau struct apabila anda memerlukan definisi dan setiap rujukan.
- `dependency_search`: Gunakan penjelajahan arah masuk pada fungsi kongsi sebelum tandatangan atau pengendalian ralatnya berubah.
- `get_task_context`: Gunakan untuk gesaan seperti “terangkan cara paket bergerak daripada sampukan penerimaan ke penghurai protokol”.
