# C di Maguyva: graf panggilan untuk kode sistem dan embedded

Canonical source: https://maguyva.ai/id/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 mendukung C dengan AST, simbol, dan graf, sehingga agen AI dapat menelusuri fungsi, struct, include, dan pemanggil dalam kode sistem, firmware, dan pustaka.

## Snapshot dukungan

- Tier: Dukungan AST dan simbol
- Pemrograman
- Ekstensi: .c, .h
- Parsing AST sungguhan untuk pencarian sadar-syntax dan konteks struktural.
- Simbol bernama menggerakkan pencarian semantik dan cross-reference. Navigasi graf tersedia saat ekstraksi relasi diaktifkan.
- Bahasa ini menyumbangkan simbol dan relasi ke pencarian berbasis graf; jenis edge yang didukung bervariasi sesuai konstruk bawaan bahasa tersebut.
- Parsing AST dan ekstraksi simbol sama-sama tersedia.

## Paling cocok untuk

- Tim firmware, embedded, dan sistem operasi, tempat perubahan kecil pada fungsi bersama dapat menjalar ke jalur perangkat keras.
- Pustaka C berumur panjang dengan header publik, makro ekspor, dan banyak translation unit internal.
- Tinjauan berbantuan agen, dengan pertanyaan: “siapa yang memanggil ini, dan melalui header mana?”

## Workflow agent

- Menemukan setiap pemanggil sebuah fungsi sebelum signature atau penanganan galatnya berubah.
- Memetakan berkas yang meng-include sebuah header dan struct yang mereka gunakan.
- Menelusuri sebuah permintaan dari interrupt handler atau titik masuk melalui fungsi yang dicapainya.

## Mengapa C membutuhkan graf panggilan, bukan grep

C tidak punya kelas atau modul untuk mengatur kode. Strukturnya tinggal di panggilan fungsi, header, dan struct, dan nama yang sama bisa muncul di komentar, makro, dan literal string. Makro ekspor dan anotasi membungkus deklarasi, sehingga alat yang hanya mengurai C murni tersandung. Bagi agen, langkah pertama yang aman adalah graf panggilan.

Maguyva membangun graf ini, sehingga agen dapat melihat ke mana sebuah fungsi menjangkau dan apa yang menjangkaunya sebelum mengusulkan perubahan.

## Apa yang diekstrak Maguyva dari C

Maguyva mencakup `.c` dan `.h`. Definisi fungsi diekstrak sebagai simbol, dan struct serta union dapat dipilih sebagai definisi tipe dalam pencarian struktural. Direktif `#include` menjadi relasi impor.

Makro ekspor dan visibilitas (pola seperti `FOO_API`, `DLLEXPORT`, atau `LIBEXPORT`) dan makro anotasi keamanan thread (seperti `GUARDED_BY` dan `REQUIRES`) di-mask sebelum penguraian, sehingga deklarasi yang dibungkusnya diurai sebagai deklarasi biasa. Badan makro mirip fungsi diurai; badan makro mirip objek tidak.

Graf mencatat panggilan, include, instansiasi melalui compound literal, referensi tipe, pembacaan dan penulisan, serta alur kontrol. Sekitar 124 panggilan pustaka standar C (`printf`, `malloc`, `free`, `memcpy`, `strlen`, dan sejenisnya) difilter dari relasi, agar kode proyek menonjol.

## Contoh prompt agen

- "Siapa yang memanggil `uart_write`, secara langsung atau melalui fungsi lain?" (`dependency_search` arah masuk)
- "Berkas mana yang meng-include `config.h`, dan struct mana yang mereka gunakan?" (`dependency_search`, lalu `find_symbol`)
- "Jelaskan bagaimana sebuah paket bergerak dari interrupt penerimaan ke parser protokol." (`get_task_context`)

## Batasan yang diketahui

- C tidak memiliki kelas maupun eksepsi, sehingga relasi pewarisan, implementasi interface, override, throw, dan catch ditandai tidak berlaku.
- `.h` muncul dalam daftar ekstensi C, C++, dan Objective-C, sehingga header di pohon kode multibahasa terbagi di antara profil-profil tersebut.
- Panggilan ke fungsi pustaka standar yang difilter bukan edge graf. Gunakan `text_pattern_search` saat Anda membutuhkan setiap `malloc` atau `memcpy`.

## Langkah berikutnya

Hubungkan repositori dengan [panduan memulai cepat](/id/docs/quickstart), lalu periksa matriks dukungan di [halaman kompatibilitas](/id/docs/compatibility). Untuk kode C++ di pohon yang sama, baca [panduan C++](/id/languages/cpp).

## Detail engine

- Dukungan C mencakup `.c` dan `.h`. Definisi fungsi adalah simbol, struct dan union adalah definisi tipe, dan `#include` menjadi relasi impor.
- Makro ekspor, visibilitas, dan anotasi keamanan thread di-mask sebelum penguraian, sehingga deklarasi yang dibungkus tetap terurai. Badan makro mirip fungsi diurai; yang mirip objek tidak.
- Sekitar 124 panggilan pustaka standar seperti `printf`, `malloc`, dan `memcpy` difilter. Relasi pewarisan, override, dan eksepsi ditandai tidak berlaku.

## Titik masuk MCP yang berguna

- `find_symbol`: Gunakan dengan nama fungsi atau struct saat Anda membutuhkan definisi dan setiap referensi.
- `dependency_search`: Gunakan penelusuran arah masuk pada fungsi bersama sebelum signature atau penanganan galatnya berubah.
- `get_task_context`: Gunakan untuk prompt seperti “jelaskan bagaimana sebuah paket bergerak dari interrupt penerimaan ke parser protokol”.
