# C en Maguyva: grafos de llamadas para código de sistemas y embebido

Canonical source: https://maguyva.ai/es/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 admite C con AST, símbolos y grafo, para que los agentes de IA sigan funciones, structs, includes y llamadores en código de sistemas, firmware y bibliotecas.

## Resumen de soporte

- Nivel: Soporte de AST y símbolos
- Programación
- Extensiones: .c, .h
- Análisis AST real para búsqueda con reconocimiento de sintaxis y contexto estructural.
- Los símbolos con nombre alimentan la búsqueda semántica y las referencias cruzadas. La navegación por grafo está disponible cuando la extracción de relaciones está habilitada.
- Este lenguaje aporta símbolos y relaciones a la búsqueda basada en grafos; los tipos de arista disponibles varían según sus construcciones nativas.
- Están disponibles tanto el análisis AST como la extracción de símbolos.

## Mejor uso

- Equipos de firmware, sistemas embebidos y sistemas operativos donde un pequeño cambio en una función compartida puede llegar a rutas de hardware.
- Bibliotecas C de larga vida con headers públicos, macros de exportación y muchas unidades de traducción internas.
- Revisiones asistidas por agentes en las que la pregunta es: "¿quién llama a esto y a través de qué headers?"

## Flujos de trabajo del agente

- Encontrar todos los llamadores de una función antes de cambiar su firma o su manejo de errores.
- Mapear qué archivos incluyen un header y qué structs usan.
- Rastrear una solicitud desde un manejador de interrupciones o un punto de entrada a través de las funciones que alcanza.

## Por qué C necesita un grafo de llamadas y no grep

C no tiene clases ni módulos que organicen el código. La estructura vive en las llamadas a funciones, los headers y los structs, y el mismo nombre puede aparecer en comentarios, macros y literales de cadena. Las macros de exportación y de anotación envuelven declaraciones, lo que hace tropezar a las herramientas que solo analizan C puro. Para un agente, el primer paso seguro es el grafo de llamadas.

Maguyva construye ese grafo para que un agente vea a qué llega una función y qué llega a ella antes de proponer un cambio.

## Qué extrae Maguyva en C

Maguyva cubre `.c` y `.h`. Las definiciones de funciones se extraen como símbolos, y los structs y unions se pueden seleccionar como definiciones de tipo en la búsqueda estructural. Las directivas `#include` se convierten en relaciones de importación.

Las macros de exportación y visibilidad (patrones como `FOO_API`, `DLLEXPORT` o `LIBEXPORT`) y las macros de anotación de seguridad entre hilos (como `GUARDED_BY` y `REQUIRES`) se enmascaran antes del análisis, así que las declaraciones envueltas en ellas se siguen reconociendo como declaraciones. Los cuerpos de las macros tipo función se analizan; los de las macros tipo objeto, no.

El grafo registra llamadas, includes, instanciación mediante literales compuestos, referencias de tipo, lecturas y escrituras, y flujo de control. Unas 124 llamadas de la biblioteca estándar de C (`printf`, `malloc`, `free`, `memcpy`, `strlen` y similares) se filtran de las relaciones para que destaque el código del proyecto.

## Ejemplos de prompts para agentes

- "¿Quién llama a `uart_write`, directamente o a través de otras funciones?" (`dependency_search` incoming)
- "¿Qué archivos incluyen `config.h` y cuáles de sus structs usan?" (`dependency_search` y luego `find_symbol`)
- "Explica cómo viaja un paquete desde la interrupción de recepción hasta el parser del protocolo." (`get_task_context`)

## Limitaciones conocidas

- C no tiene clases ni excepciones, así que las relaciones de herencia, implementación de interfaces, sobrescritura, lanzamiento y captura están marcadas como no aplicables.
- `.h` aparece en las listas de extensiones de C, C++ y Objective-C, por lo que los headers de varios lenguajes se comparten entre esos perfiles.
- Las llamadas a funciones filtradas de la biblioteca estándar no son aristas del grafo. Usa `text_pattern_search` cuando necesites cada `malloc` o `memcpy`.

## Próximos pasos

Conecta un repositorio con el [inicio rápido](/es/docs/quickstart) y luego revisa la matriz de compatibilidad en la [página de compatibilidad](/es/docs/compatibility). Para código C++ en el mismo árbol, lee la [guía de C++](/es/languages/cpp).

## Detalles del motor

- La compatibilidad con C cubre `.c` y `.h`. Las definiciones de funciones son símbolos, los structs y unions son definiciones de tipo, y `#include` se convierte en una relación de importación.
- Las macros de exportación, visibilidad y anotación de seguridad entre hilos se enmascaran antes del análisis, así que las declaraciones envueltas se analizan. Los cuerpos de macros tipo función se analizan; los de macros tipo objeto, no.
- Unas 124 llamadas de la biblioteca estándar como `printf`, `malloc` y `memcpy` se filtran. Las relaciones de herencia, sobrescritura y excepciones están marcadas como no aplicables.

## Puntos de entrada MCP útiles

- `find_symbol`: Úsalo con el nombre de una función o struct cuando necesites la definición y cada referencia.
- `dependency_search`: Usa el recorrido incoming sobre una función compartida antes de cambiar su firma o su manejo de errores.
- `get_task_context`: Úsalo para prompts como "explica cómo viaja un paquete desde la interrupción de recepción hasta el parser del protocolo".
