# Maguyva'da C: sistem ve gömülü kod için çağrı grafları

Canonical source: https://maguyva.ai/tr/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'yi AST, sembol ve graf desteğiyle sunar; böylece yapay zeka ajanları sistem, aygıt yazılımı ve kütüphane kodunda fonksiyonları, struct'ları, include'ları ve çağıranları izleyebilir.

## Destek anlık görüntüsü

- Katman: AST ve sembol desteği
- Programlama
- Uzantılar: .c, .h
- Sözdizimi farkında arama ve yapısal bağlam için gerçek AST ayrıştırması.
- Adlandırılmış semboller anlamsal aramayı ve çapraz referansı besler. İlişki çıkarımı etkinleştirildiğinde graf gezinmesi kullanılabilir.
- Bu dil, graf farkındalıklı aramaya semboller ve ilişkiler sağlar; desteklenen kenar türleri dilin yerel yapılarına göre değişir.
- Hem AST ayrıştırma hem de sembol çıkarma kullanılabilir.

## En uygun kullanım

- Ortak bir fonksiyondaki küçük bir değişikliğin donanım yollarına ulaşabildiği aygıt yazılımı, gömülü sistem ve işletim sistemi ekipleri.
- Genel başlık dosyaları, dışa aktarma makroları ve birçok iç derleme birimi olan uzun ömürlü C kütüphaneleri.
- Sorunun “bunu kim, hangi başlık dosyaları üzerinden çağırıyor?” olduğu, ajan destekli incelemeler.

## Ajan iş akışları

- İmzası veya hata işleme biçimi değişmeden önce bir fonksiyonu çağıran herkesi bulmak.
- Bir başlık dosyasını dahil eden dosyaları ve kullandıkları struct'ları haritalamak.
- Bir isteği bir kesme işleyicisinden veya giriş noktasından ulaştığı fonksiyonlar boyunca izlemek.

## C neden grep'e değil çağrı grafına ihtiyaç duyar

C'de kodu düzenleyen sınıflar veya modüller yoktur. Yapı fonksiyon çağrılarında, başlık dosyalarında ve struct'larda yaşar; aynı ad yorumlarda, makrolarda ve dize sabitlerinde de geçebilir. Dışa aktarma ve anotasyon makroları bildirimleri sarar ve bu, yalnızca saf C ayrıştıran araçları şaşırtır. Bir ajan için güvenli ilk adım çağrı grafıdır.

Maguyva bu grafı oluşturur; böylece ajan bir değişiklik önermeden önce bir fonksiyonun nereye ulaştığını ve ona neyin ulaştığını görür.

## Maguyva C'den neleri çıkarır

Maguyva `.c` ve `.h` dosyalarını kapsar. Fonksiyon tanımları sembol olarak çıkarılır; struct'lar ve union'lar yapısal aramada tür tanımı olarak seçilebilir. `#include` yönergeleri içe aktarma ilişkisi olur.

Dışa aktarma ve görünürlük makroları (`FOO_API`, `DLLEXPORT` veya `LIBEXPORT` gibi desenler) ile iş parçacığı güvenliği anotasyon makroları (`GUARDED_BY` ve `REQUIRES` gibi) ayrıştırmadan önce maskelenir; böylece sardıkları bildirimler normal bildirimler olarak ayrıştırılır. Fonksiyon benzeri makroların gövdeleri ayrıştırılır; nesne benzeri makroların gövdeleri ayrıştırılmaz.

Graf çağrıları, include'ları, bileşik sabitler yoluyla örneklemeyi, tür referanslarını, okuma ve yazmaları ve denetim akışını kaydeder. Proje kodunun öne çıkması için yaklaşık 124 C standart kütüphane çağrısı (`printf`, `malloc`, `free`, `memcpy`, `strlen` ve benzerleri) ilişkilerden filtrelenir.

## Örnek ajan istemleri

- "`uart_write` fonksiyonunu doğrudan veya başka fonksiyonlar üzerinden kim çağırıyor?" (gelen yönde `dependency_search`)
- "Hangi dosyalar `config.h` dosyasını dahil ediyor ve onun hangi struct'larını kullanıyor?" (`dependency_search`, ardından `find_symbol`)
- "Bir paketin alma kesmesinden protokol ayrıştırıcısına nasıl ilerlediğini açıkla." (`get_task_context`)

## Bilinen sınırlar

- C'de sınıflar ve istisnalar yoktur; bu nedenle kalıtım, arayüz uygulaması, geçersiz kılma, fırlatma ve yakalama ilişkileri uygulanamaz olarak işaretlenir.
- `.h`, C, C++ ve Objective-C uzantı listelerinde yer alır; bu nedenle çok dilli ağaçlarda başlık dosyaları bu profiller arasında paylaşılır.
- Filtrelenen standart kütüphane fonksiyonlarına yapılan çağrılar graf kenarı değildir. Her `malloc` veya `memcpy` çağrısına ihtiyacınız olduğunda `text_pattern_search` kullanın.

## Sonraki adımlar

[Hızlı başlangıç](/tr/docs/quickstart) ile bir repo bağlayın, ardından destek matrisi için [uyumluluk sayfasına](/tr/docs/compatibility) bakın. Aynı ağaçtaki C++ kodu için [C++ rehberini](/tr/languages/cpp) okuyun.

## Motor ayrıntıları

- C desteği `.c` ve `.h` dosyalarını kapsar. Fonksiyon tanımları semboldür, struct'lar ve union'lar tür tanımıdır ve `#include` içe aktarma ilişkisi olur.
- Dışa aktarma, görünürlük ve iş parçacığı güvenliği anotasyon makroları ayrıştırmadan önce maskelenir, böylece sarılan bildirimler ayrıştırılır. Fonksiyon benzeri makro gövdeleri ayrıştırılır; nesne benzeri olanlar ayrıştırılmaz.
- `printf`, `malloc` ve `memcpy` gibi yaklaşık 124 standart kütüphane çağrısı filtrelenir. Kalıtım, geçersiz kılma ve istisna ilişkileri uygulanamaz olarak işaretlenir.

## Yararlı MCP giriş noktaları

- `find_symbol`: Tanıma ve her referansa ihtiyacınız olduğunda bir fonksiyon veya struct adıyla kullanın.
- `dependency_search`: İmzası veya hata işleme biçimi değişmeden önce ortak bir fonksiyonda gelen yönde dolaşım kullanın.
- `get_task_context`: "Bir paketin alma kesmesinden protokol ayrıştırıcısına nasıl ilerlediğini açıkla" gibi istemler için kullanın.
