# Maguyva में C: सिस्टम और एम्बेडेड कोड के लिए कॉल ग्राफ़

Canonical source: https://maguyva.ai/hi/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, सिंबल और ग्राफ़ के साथ सपोर्ट करता है, ताकि AI एजेंट सिस्टम, फ़र्मवेयर और लाइब्रेरी कोड में फ़ंक्शन, structs, इनक्लूड और कॉलर ट्रेस कर सकें।

## सपोर्ट स्नैपशॉट

- टियर: AST और सिंबल सपोर्ट
- प्रोग्रामिंग
- एक्सटेंशन: .c, .h
- सिंटैक्स-अवेयर सर्च और स्ट्रक्चरल कॉन्टेक्स्ट के लिए असली AST पार्सिंग।
- नामित सिंबल सिमेंटिक लुकअप और क्रॉस-रेफ़रेंस को फ़ीड करते हैं। रिलेशनशिप एक्सट्रैक्शन सक्षम होने पर ग्राफ़ नेविगेशन उपलब्ध होता है।
- यह भाषा ग्राफ़-अवेयर सर्च में सिंबल्स और रिलेशनशिप्स जोड़ती है; सपोर्टेड एज प्रकार इसके नेटिव कंस्ट्रक्ट्स के अनुसार बदलते हैं।
- AST पार्सिंग और सिंबल एक्सट्रैक्शन, दोनों उपलब्ध हैं।

## सबसे उपयुक्त

- फ़र्मवेयर, एम्बेडेड और ऑपरेटिंग-सिस्टम टीमें, जहाँ किसी साझा फ़ंक्शन में छोटा-सा बदलाव हार्डवेयर पाथ तक पहुँच सकता है।
- पब्लिक हेडर, export मैक्रो और कई आंतरिक ट्रांसलेशन यूनिट वाली लंबे समय से चल रही C लाइब्रेरी।
- एजेंट की मदद से होने वाली समीक्षाएँ, जहाँ सवाल यह है: “इसे कौन कॉल करता है, और किन हेडर के ज़रिए?”

## एजेंट वर्कफ़्लो

- किसी फ़ंक्शन का सिग्नेचर या एरर हैंडलिंग बदलने से पहले उसके हर कॉलर को ढूँढना।
- किसी हेडर को include करने वाली फ़ाइलों और उनके इस्तेमाल किए गए structs का नक्शा बनाना।
- किसी रिक्वेस्ट को इंटरप्ट हैंडलर या एंट्री पॉइंट से, उन फ़ंक्शन तक ट्रेस करना जिन तक वह पहुँचती है।

## C को grep की नहीं, कॉल ग्राफ़ की ज़रूरत क्यों है

C में कोड को व्यवस्थित करने के लिए क्लास या मॉड्यूल नहीं होते। संरचना फ़ंक्शन कॉल, हेडर और structs में रहती है, और वही नाम कमेंट, मैक्रो और स्ट्रिंग लिटरल में भी आ सकता है। Export और एनोटेशन मैक्रो घोषणाओं को लपेट देते हैं, जिससे सिर्फ़ शुद्ध C पार्स करने वाले टूल उलझ जाते हैं। एजेंट के लिए सुरक्षित पहला कदम कॉल ग्राफ़ है।

Maguyva यह ग्राफ़ बनाता है, ताकि एजेंट बदलाव सुझाने से पहले देख सके कि कोई फ़ंक्शन कहाँ तक पहुँचता है और उस तक क्या पहुँचता है।

## Maguyva, C से क्या निकालता है

Maguyva `.c` और `.h` को कवर करता है। फ़ंक्शन परिभाषाएँ सिंबल के रूप में निकाली जाती हैं, और structs व unions को स्ट्रक्चरल सर्च में टाइप परिभाषा के रूप में चुना जा सकता है। `#include` डायरेक्टिव इम्पोर्ट संबंध बन जाते हैं।

Export और विज़िबिलिटी मैक्रो (`FOO_API`, `DLLEXPORT` या `LIBEXPORT` जैसे पैटर्न) और थ्रेड-सेफ़्टी एनोटेशन मैक्रो (जैसे `GUARDED_BY` और `REQUIRES`) पार्स करने से पहले मास्क कर दिए जाते हैं, ताकि जिन घोषणाओं को वे लपेटते हैं वे सामान्य घोषणाओं की तरह पार्स हों। फ़ंक्शन-जैसे मैक्रो की बॉडी पार्स होती है; ऑब्जेक्ट-जैसे मैक्रो की बॉडी नहीं।

ग्राफ़ कॉल, इनक्लूड, कंपाउंड लिटरल के ज़रिए इंस्टैंशिएशन, टाइप रेफ़रेंस, रीड और राइट, और कंट्रोल फ़्लो दर्ज करता है। लगभग 124 C स्टैंडर्ड-लाइब्रेरी कॉल (`printf`, `malloc`, `free`, `memcpy`, `strlen` और इसी तरह के) संबंधों से फ़िल्टर किए जाते हैं, ताकि प्रोजेक्ट का कोड अलग दिखे।

## एजेंट प्रॉम्प्ट के उदाहरण

- "`uart_write` को कौन कॉल करता है, सीधे या दूसरे फ़ंक्शन के ज़रिए?" (incoming दिशा में `dependency_search`)
- "कौन-सी फ़ाइलें `config.h` को include करती हैं, और उसके कौन-से structs इस्तेमाल करती हैं?" (`dependency_search`, फिर `find_symbol`)
- "समझाओ कि कोई पैकेट रिसीव इंटरप्ट से प्रोटोकॉल पार्सर तक कैसे जाता है।" (`get_task_context`)

## ज्ञात सीमाएँ

- C में क्लास या एक्सेप्शन नहीं हैं, इसलिए इनहेरिटेंस, इंटरफ़ेस इम्प्लीमेंटेशन, ओवरराइड, throw और catch संबंध लागू नहीं के रूप में चिह्नित हैं।
- `.h` C, C++ और Objective-C की एक्सटेंशन सूचियों में आता है, इसलिए बहुभाषी ट्री में हेडर इन प्रोफ़ाइल के बीच बँट जाते हैं।
- फ़िल्टर किए गए स्टैंडर्ड-लाइब्रेरी फ़ंक्शन को किए गए कॉल ग्राफ़ एज नहीं हैं। जब आपको हर `malloc` या `memcpy` चाहिए, तो `text_pattern_search` इस्तेमाल करें।

## अगले कदम

[क्विकस्टार्ट](/hi/docs/quickstart) से रिपॉज़िटरी जोड़ें, फिर सपोर्ट मैट्रिक्स [कम्पैटिबिलिटी पेज](/hi/docs/compatibility) पर देखें। उसी ट्री के C++ कोड के लिए [C++ गाइड](/hi/languages/cpp) पढ़ें।

## इंजन विवरण

- C सपोर्ट `.c` और `.h` को कवर करता है। फ़ंक्शन परिभाषाएँ सिंबल हैं, structs और unions टाइप परिभाषाएँ हैं, और `#include` इम्पोर्ट संबंध बनता है।
- Export, विज़िबिलिटी और थ्रेड-सेफ़्टी एनोटेशन मैक्रो पार्स करने से पहले मास्क किए जाते हैं, ताकि लपेटी गई घोषणाएँ पार्स हों। फ़ंक्शन-जैसे मैक्रो की बॉडी पार्स होती है; ऑब्जेक्ट-जैसे की नहीं।
- `printf`, `malloc` और `memcpy` जैसे लगभग 124 स्टैंडर्ड-लाइब्रेरी कॉल फ़िल्टर किए जाते हैं। इनहेरिटेंस, ओवरराइड और एक्सेप्शन संबंध लागू नहीं के रूप में चिह्नित हैं।

## उपयोगी MCP एंट्री पॉइंट

- `find_symbol`: जब आपको परिभाषा और हर रेफ़रेंस चाहिए, तो किसी फ़ंक्शन या struct नाम के साथ इस्तेमाल करें।
- `dependency_search`: किसी साझा फ़ंक्शन का सिग्नेचर या एरर हैंडलिंग बदलने से पहले उस पर incoming ट्रैवर्सल इस्तेमाल करें।
- `get_task_context`: "समझाओ कि कोई पैकेट रिसीव इंटरप्ट से प्रोटोकॉल पार्सर तक कैसे जाता है" जैसे प्रॉम्प्ट के लिए इस्तेमाल करें।
