# C dans Maguyva : des graphes d'appels pour le code système et embarqué

Canonical source: https://maguyva.ai/fr/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 prend en charge C avec AST, symboles et graphe, pour que les agents IA suivent fonctions, structs, includes et appelants dans le code système, firmware et bibliothèque.

## Aperçu du support

- Palier: Prise en charge de l’AST et des symboles
- Programmation
- Extensions: .c, .h
- Analyse AST réelle pour une recherche consciente de la syntaxe et un contexte structurel.
- Les symboles nommés alimentent la recherche sémantique et le référencement croisé. La navigation par graphe est disponible lorsque l’extraction de relations est activée.
- Ce langage fournit des symboles et des relations à la recherche tenant compte du graphe ; les types d’arêtes pris en charge varient selon ses constructions natives.
- L’analyse AST et l’extraction de symboles sont toutes deux disponibles.

## Idéal pour

- Les équipes firmware, embarqué et système d'exploitation, où un petit changement sur une fonction partagée peut atteindre des chemins matériels.
- Les bibliothèques C de longue date avec en-têtes publics, macros d'export et nombreuses unités de traduction internes.
- Les revues assistées par agent où la question est : « Qui appelle ceci, et par quels en-têtes ? »

## Workflows d'agent

- Trouver tous les appelants d'une fonction avant d'en modifier la signature ou la gestion d'erreurs.
- Cartographier les fichiers qui incluent un en-tête et les structs qu'ils utilisent.
- Suivre une requête depuis un gestionnaire d'interruption ou un point d'entrée à travers les fonctions qu'elle atteint.

## Pourquoi C demande un graphe d'appels, pas grep

C n'a ni classes ni modules pour organiser le code. La structure vit dans les appels de fonctions, les en-têtes et les structs, et un même nom peut apparaître dans des commentaires, des macros et des littéraux de chaîne. Des macros d'export et d'annotation enveloppent les déclarations, ce qui fait trébucher les outils qui ne savent analyser que du C pur. Pour un agent, la première étape sûre, c'est le graphe d'appels.

Maguyva construit ce graphe pour qu'un agent voie ce qu'une fonction atteint et ce qui l'atteint avant de proposer un changement.

## Ce que Maguyva extrait en C

Maguyva couvre `.c` et `.h`. Les définitions de fonctions sont extraites comme symboles, et les structs et unions peuvent être sélectionnées comme définitions de type dans la recherche structurelle. Les directives `#include` deviennent des relations d'import.

Les macros d'export et de visibilité (des motifs comme `FOO_API`, `DLLEXPORT` ou `LIBEXPORT`) et les macros d'annotation de thread safety (comme `GUARDED_BY` et `REQUIRES`) sont masquées avant l'analyse, si bien que les déclarations qu'elles enveloppent sont toujours reconnues comme des déclarations. Le corps des macros de type fonction est analysé ; celui des macros de type objet ne l'est pas.

Le graphe enregistre les appels, les includes, l'instanciation par littéraux composés, les références de type, les lectures et écritures, et le flux de contrôle. Environ 124 appels de la bibliothèque standard C (`printf`, `malloc`, `free`, `memcpy`, `strlen` et similaires) sont filtrés des relations pour faire ressortir le code du projet.

## Exemples de prompts pour agents

- « Qui appelle `uart_write`, directement ou via d'autres fonctions ? » (`dependency_search` en incoming)
- « Quels fichiers incluent `config.h`, et lesquelles de ses structs utilisent-ils ? » (`dependency_search`, puis `find_symbol`)
- « Explique comment un paquet passe de l'interruption de réception au parseur de protocole. » (`get_task_context`)

## Limites connues

- C n'a ni classes ni exceptions ; les relations d'héritage, d'implémentation d'interface, de surcharge, de levée et de capture sont donc marquées comme non applicables.
- `.h` figure dans les listes d'extensions de C, C++ et Objective-C ; les en-têtes multilangages sont donc partagés entre ces profils.
- Les appels aux fonctions filtrées de la bibliothèque standard ne sont pas des arêtes du graphe. Utilisez `text_pattern_search` quand il vous faut chaque `malloc` ou `memcpy`.

## Étapes suivantes

Connectez un dépôt avec le [démarrage rapide](/fr/docs/quickstart), puis consultez la matrice de prise en charge sur la [page de compatibilité](/fr/docs/compatibility). Pour le code C++ du même arbre, lisez le [guide C++](/fr/languages/cpp).

## Détails du moteur

- La prise en charge de C couvre `.c` et `.h`. Les définitions de fonctions sont des symboles, les structs et unions des définitions de type, et `#include` devient une relation d'import.
- Les macros d'export, de visibilité et d'annotation de thread safety sont masquées avant l'analyse, si bien que les déclarations enveloppées sont analysées. Le corps des macros de type fonction est analysé ; celui des macros de type objet ne l'est pas.
- Environ 124 appels de la bibliothèque standard comme `printf`, `malloc` et `memcpy` sont filtrés. Les relations d'héritage, de surcharge et d'exception sont marquées comme non applicables.

## Points d'entrée MCP utiles

- `find_symbol`: Utilisez-le pour un nom de fonction ou de struct quand vous avez besoin de la définition et de chaque référence.
- `dependency_search`: Utilisez la traversée incoming sur une fonction partagée avant d'en modifier la signature ou la gestion d'erreurs.
- `get_task_context`: Utilisez-le pour des prompts comme « explique comment un paquet passe de l'interruption de réception au parseur de protocole ».
