Langkau ke kandungan
cd /languages
  • Teras sistem
  • Pengaturcaraan
  • Sokongan AST dan simbol

C dalam Maguyva: graf panggilan untuk kod sistem dan terbenam

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.

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, kemudian semak matriks sokongan di halaman keserasian. Untuk kod C++ dalam pepohon yang sama, baca panduan C++.

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.

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”.