# لغة C في Maguyva: رسوم بيانية للاستدعاءات في شيفرة الأنظمة والأنظمة المدمجة

Canonical source: https://maguyva.ai/ar/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 والرموز والرسم البياني، ليتمكن وكلاء الذكاء الاصطناعي من تتبّع الدوال والـ structs وعبارات include والمستدعين في شيفرة الأنظمة والبرامج الثابتة والمكتبات.

## لمحة عن الدعم

- المستوى: دعم AST والرموز
- البرمجة
- الامتدادات: .c, .h
- تحليل AST حقيقي لبحث واعٍ بالصياغة النحوية وسياق بنيوي.
- تُغذّي الرموز المسمّاة البحث الدلالي والمراجع المتقاطعة. ويتوفر التنقل عبر الرسم البياني عند تمكين استخراج العلاقات.
- تُسهم هذه اللغة بالرموز والعلاقات في البحث المراعي لبنية الرسم البياني؛ وتختلف أنواع الحواف المدعومة بحسب التراكيب الأصلية في اللغة.
- يتوفر كل من تحليل AST واستخلاص الرموز.

## الأنسب لـ

- فرق البرامج الثابتة والأنظمة المدمجة وأنظمة التشغيل، حيث قد يصل تغيير صغير في دالة مشتركة إلى مسارات العتاد.
- مكتبات C طويلة العمر ذات ترويسات عامة ووحدات ماكرو للتصدير ووحدات ترجمة داخلية كثيرة.
- المراجعات بمساعدة الوكلاء، حيث يكون السؤال: «من يستدعي هذا، وعبر أي ترويسات؟»

## سير عمل الوكلاء

- العثور على كل من يستدعي دالة قبل تغيير توقيعها أو طريقة معالجتها للأخطاء.
- رسم خريطة الملفات التي تضمّن ترويسة والـ structs التي تستخدمها.
- تتبّع طلب من معالج مقاطعة أو نقطة دخول عبر الدوال التي يصل إليها.

## لماذا تحتاج C إلى رسم بياني للاستدعاءات لا إلى grep

لا تملك C فئات أو وحدات تنظّم الشيفرة. تعيش البنية في استدعاءات الدوال والترويسات والـ structs، وقد يظهر الاسم نفسه في التعليقات ووحدات الماكرو والسلاسل الحرفية. وتلتفّ وحدات ماكرو التصدير والتعليقات التوضيحية حول التصريحات، ما يُربك الأدوات التي لا تحلّل إلا C الصافية. بالنسبة إلى الوكيل، الخطوة الأولى الآمنة هي الرسم البياني للاستدعاءات.

يبني Maguyva هذا الرسم البياني، فيرى الوكيل إلى أين تصل الدالة وما الذي يصل إليها قبل أن يقترح تغييرًا.

## ما الذي يستخرجه Maguyva من C

يغطي Maguyva الملفات `.c` و`.h`. تُستخرج تعريفات الدوال رموزًا، ويمكن اختيار الـ structs والـ unions تعريفاتِ أنواع في البحث البنيوي. وتصبح توجيهات `#include` علاقات استيراد.

تُحجب قبل التحليل وحدات ماكرو التصدير والرؤية (أنماط مثل `FOO_API` أو `DLLEXPORT` أو `LIBEXPORT`) ووحدات ماكرو التعليقات الخاصة بأمان الخيوط (مثل `GUARDED_BY` و`REQUIRES`)، فتُحلَّل التصريحات التي تلتفّ حولها تصريحاتٍ عادية. وتُحلَّل أجسام وحدات الماكرو الشبيهة بالدوال، ولا تُحلَّل أجسام وحدات الماكرو الشبيهة بالكائنات.

يسجّل الرسم البياني الاستدعاءات وعبارات include وإنشاء المثيلات عبر القيم الحرفية المركّبة ومراجع الأنواع والقراءات والكتابات وتدفق التحكم. ويُستبعد من العلاقات نحو 124 استدعاءً من المكتبة القياسية لـ C (`printf` و`malloc` و`free` و`memcpy` و`strlen` وما شابهها)، لتبرز شيفرة المشروع.

## أمثلة على مطالبات الوكلاء

- "من يستدعي `uart_write`، مباشرة أو عبر دوال أخرى؟" (`dependency_search` في الاتجاه الوارد)
- "ما الملفات التي تضمّن `config.h`، وأيّ structs منه تستخدم؟" (`dependency_search` ثم `find_symbol`)
- "اشرح كيف تنتقل حزمة من مقاطعة الاستقبال إلى محلّل البروتوكول." (`get_task_context`)

## القيود المعروفة

- لا تملك C فئات ولا استثناءات، لذا تُعلَّم علاقات الوراثة وتنفيذ الواجهات والتجاوز والرمي والالتقاط بأنها غير منطبقة.
- يظهر `.h` في قوائم امتدادات C وC++ وObjective-C، لذا تتوزّع الترويسات في الأشجار متعددة اللغات بين هذه الملفات التعريفية.
- الاستدعاءات إلى دوال المكتبة القياسية المستبعدة ليست حوافَّ في الرسم البياني. استخدم `text_pattern_search` حين تحتاج إلى كل `malloc` أو `memcpy`.

## الخطوات التالية

اربط مستودعًا عبر [دليل البدء السريع](/ar/docs/quickstart)، ثم راجع مصفوفة الدعم في [صفحة التوافق](/ar/docs/compatibility). ولشيفرة C++ في الشجرة نفسها، اقرأ [دليل لغة C++](/ar/languages/cpp).

## تفاصيل المحرك

- يغطي دعم C الملفات `.c` و`.h`. تعريفات الدوال رموز، والـ structs والـ unions تعريفات أنواع، ويصبح `#include` علاقة استيراد.
- تُحجب وحدات ماكرو التصدير والرؤية وتعليقات أمان الخيوط قبل التحليل، فتُحلَّل التصريحات الملتفّ حولها. تُحلَّل أجسام وحدات الماكرو الشبيهة بالدوال، ولا تُحلَّل الشبيهة بالكائنات.
- يُستبعد نحو 124 استدعاءً من المكتبة القياسية مثل `printf` و`malloc` و`memcpy`. وتُعلَّم علاقات الوراثة والتجاوز والاستثناءات بأنها غير منطبقة.

## نقاط دخول مفيدة عبر MCP

- `find_symbol`: استخدمه مع اسم دالة أو struct حين تحتاج إلى التعريف وكل مرجع.
- `dependency_search`: استخدم التتبّع في الاتجاه الوارد على دالة مشتركة قبل تغيير توقيعها أو طريقة معالجتها للأخطاء.
- `get_task_context`: استخدمه لمطالبات مثل «اشرح كيف تنتقل حزمة من مقاطعة الاستقبال إلى محلّل البروتوكول».
