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.
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 y luego revisa la matriz de compatibilidad en la página de compatibilidad. Para código C++ en el mismo árbol, lee la guía de C++.