# C in Maguyva: grafi delle chiamate per codice di sistema ed embedded

Canonical source: https://maguyva.ai/it/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 supporta C con AST, simboli e grafo, così gli agenti IA seguono funzioni, struct, include e chiamanti nel codice di sistema, firmware e librerie.

## Istantanea del supporto

- Livello: Supporto AST e simboli
- Programmazione
- Estensioni: .c, .h
- Analisi AST reale per ricerca sintattica e contesto strutturale.
- I simboli nominati alimentano la ricerca semantica e i riferimenti incrociati. La navigazione del grafo è disponibile quando è abilitata l’estrazione delle relazioni.
- Questo linguaggio contribuisce con simboli e relazioni alla ricerca basata sul grafo; i tipi di arco supportati variano in base ai suoi costrutti nativi.
- Sono disponibili sia l’analisi AST sia l’estrazione dei simboli.

## Il più adatto per

- Team firmware, embedded e di sistemi operativi in cui una piccola modifica a una funzione condivisa può arrivare ai percorsi hardware.
- Librerie C di lunga data con header pubblici, macro di export e molte unità di traduzione interne.
- Revisioni assistite da agenti in cui la domanda è: "chi chiama questa funzione, e attraverso quali header?"

## Workflow degli agenti

- Trovare tutti i chiamanti di una funzione prima di cambiarne la firma o la gestione degli errori.
- Mappare quali file includono un header e quali struct usano.
- Tracciare una richiesta da un gestore di interrupt o da un punto di ingresso attraverso le funzioni che raggiunge.

## Perché C ha bisogno di un grafo delle chiamate, non di grep

C non ha classi né moduli per organizzare il codice. La struttura vive nelle chiamate di funzione, negli header e nelle struct, e lo stesso nome può comparire in commenti, macro e letterali stringa. Le macro di export e di annotazione avvolgono le dichiarazioni, mandando in crisi gli strumenti che sanno analizzare solo C puro. Per un agente, il primo passo sicuro è il grafo delle chiamate.

Maguyva costruisce questo grafo, così un agente vede cosa raggiunge una funzione e cosa la raggiunge prima di proporre una modifica.

## Cosa estrae Maguyva in C

Maguyva copre `.c` e `.h`. Le definizioni di funzione vengono estratte come simboli, e struct e union si possono selezionare come definizioni di tipo nella ricerca strutturale. Le direttive `#include` diventano relazioni di import.

Le macro di export e visibilità (pattern come `FOO_API`, `DLLEXPORT` o `LIBEXPORT`) e le macro di annotazione per la thread safety (come `GUARDED_BY` e `REQUIRES`) vengono mascherate prima dell'analisi, così le dichiarazioni avvolte vengono comunque riconosciute come dichiarazioni. I corpi delle macro di tipo funzione vengono analizzati; quelli delle macro di tipo oggetto no.

Il grafo registra chiamate, include, istanziazione tramite compound literal, riferimenti di tipo, letture e scritture, e flusso di controllo. Circa 124 chiamate della libreria standard C (`printf`, `malloc`, `free`, `memcpy`, `strlen` e simili) vengono filtrate dalle relazioni, così il codice del progetto risalta.

## Esempi di prompt per agenti

- "Chi chiama `uart_write`, direttamente o tramite altre funzioni?" (`dependency_search` incoming)
- "Quali file includono `config.h` e quali sue struct usano?" (`dependency_search`, poi `find_symbol`)
- "Spiega come un pacchetto passa dall'interrupt di ricezione al parser del protocollo." (`get_task_context`)

## Limiti noti

- C non ha classi né eccezioni, quindi le relazioni di ereditarietà, implementazione di interfacce, override, lancio e cattura sono contrassegnate come non applicabili.
- `.h` compare negli elenchi di estensioni di C, C++ e Objective-C, quindi gli header multilinguaggio sono condivisi tra questi profili.
- Le chiamate alle funzioni filtrate della libreria standard non sono archi del grafo. Usa `text_pattern_search` quando ti serve ogni `malloc` o `memcpy`.

## Prossimi passi

Collega un repository con la [guida rapida](/it/docs/quickstart), poi consulta la matrice di supporto nella [pagina di compatibilità](/it/docs/compatibility). Per il codice C++ nello stesso albero, leggi la [guida a C++](/it/languages/cpp).

## Dettagli del motore

- Il supporto a C copre `.c` e `.h`. Le definizioni di funzione sono simboli, struct e union sono definizioni di tipo, e `#include` diventa una relazione di import.
- Le macro di export, visibilità e annotazione per la thread safety vengono mascherate prima dell'analisi, così le dichiarazioni avvolte vengono analizzate. I corpi delle macro di tipo funzione vengono analizzati; quelli di tipo oggetto no.
- Circa 124 chiamate della libreria standard come `printf`, `malloc` e `memcpy` vengono filtrate. Le relazioni di ereditarietà, override ed eccezione sono contrassegnate come non applicabili.

## Punti di ingresso MCP utili

- `find_symbol`: Usalo con il nome di una funzione o di una struct quando ti servono la definizione e ogni riferimento.
- `dependency_search`: Usa la navigazione incoming su una funzione condivisa prima di cambiarne la firma o la gestione degli errori.
- `get_task_context`: Usalo per prompt come "spiega come un pacchetto passa dall'interrupt di ricezione al parser del protocollo".
