# C no Maguyva: grafos de chamadas para código de sistemas e embarcado

Canonical source: https://maguyva.ai/pt-br/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).

O Maguyva oferece suporte a C com AST, símbolos e grafo, para que agentes de IA sigam funções, structs, includes e chamadores em código de sistemas, firmware e bibliotecas.

## Panorama de suporte

- Nível: Suporte a AST e símbolos
- Programação
- Extensões: .c, .h
- Parsing real de AST para busca com consciência de sintaxe e contexto estrutural.
- Símbolos nomeados alimentam a busca semântica e as referências cruzadas. A navegação por grafo fica disponível quando a extração de relações está habilitada.
- Esta linguagem fornece símbolos e relações para a busca orientada por grafo; os tipos de aresta compatíveis variam de acordo com seus construtos nativos.
- A análise de AST e a extração de símbolos estão disponíveis.

## Uso ideal

- Equipes de firmware, sistemas embarcados e sistemas operacionais em que uma pequena mudança em uma função compartilhada pode chegar a caminhos de hardware.
- Bibliotecas C de longa vida com headers públicos, macros de exportação e muitas unidades de tradução internas.
- Revisões assistidas por agentes em que a pergunta é: "quem chama isto, e por quais headers?"

## Fluxos de trabalho de agente

- Encontrar todos os chamadores de uma função antes de mudar sua assinatura ou o tratamento de erros.
- Mapear quais arquivos incluem um header e quais structs eles usam.
- Rastrear uma requisição desde um handler de interrupção ou ponto de entrada pelas funções que ela alcança.

## Por que C precisa de um grafo de chamadas, e não de grep

C não tem classes nem módulos para organizar o código. A estrutura vive nas chamadas de função, nos headers e nas structs, e o mesmo nome pode aparecer em comentários, macros e literais de string. Macros de exportação e de anotação envolvem declarações, o que derruba ferramentas que só sabem analisar C puro. Para um agente, o primeiro passo seguro é o grafo de chamadas.

O Maguyva constrói esse grafo para que um agente veja o que uma função alcança e o que a alcança antes de propor uma mudança.

## O que o Maguyva extrai em C

O Maguyva cobre `.c` e `.h`. Definições de funções são extraídas como símbolos, e structs e unions podem ser selecionadas como definições de tipo na busca estrutural. Diretivas `#include` viram relações de importação.

Macros de exportação e visibilidade (padrões como `FOO_API`, `DLLEXPORT` ou `LIBEXPORT`) e macros de anotação de thread safety (como `GUARDED_BY` e `REQUIRES`) são mascaradas antes da análise, então as declarações envolvidas por elas continuam sendo reconhecidas como declarações. Os corpos de macros do tipo função são analisados; os de macros do tipo objeto, não.

O grafo registra chamadas, includes, instanciação por compound literals, referências de tipo, leituras e escritas, e fluxo de controle. Cerca de 124 chamadas da biblioteca padrão de C (`printf`, `malloc`, `free`, `memcpy`, `strlen` e semelhantes) são filtradas das relações para que o código do projeto se destaque.

## Exemplos de prompts para agentes

- "Quem chama `uart_write`, diretamente ou por meio de outras funções?" (`dependency_search` incoming)
- "Quais arquivos incluem `config.h` e quais das suas structs eles usam?" (`dependency_search`, depois `find_symbol`)
- "Explique como um pacote vai da interrupção de recepção até o parser do protocolo." (`get_task_context`)

## Limitações conhecidas

- C não tem classes nem exceções, então relações de herança, implementação de interface, sobrescrita, lançamento e captura estão marcadas como não aplicáveis.
- `.h` aparece nas listas de extensões de C, C++ e Objective-C, então headers de várias linguagens são compartilhados entre esses perfis.
- Chamadas a funções filtradas da biblioteca padrão não são arestas do grafo. Use `text_pattern_search` quando precisar de cada `malloc` ou `memcpy`.

## Próximos passos

Conecte um repositório pelo [início rápido](/pt-br/docs/quickstart) e depois confira a matriz de suporte na [página de compatibilidade](/pt-br/docs/compatibility). Para código C++ na mesma árvore, leia o [guia de C++](/pt-br/languages/cpp).

## Detalhes do motor

- O suporte a C cobre `.c` e `.h`. Definições de funções são símbolos, structs e unions são definições de tipo, e `#include` vira uma relação de importação.
- Macros de exportação, visibilidade e anotação de thread safety são mascaradas antes da análise, então as declarações envolvidas são analisadas. Corpos de macros do tipo função são analisados; os do tipo objeto, não.
- Cerca de 124 chamadas da biblioteca padrão como `printf`, `malloc` e `memcpy` são filtradas. Relações de herança, sobrescrita e exceção estão marcadas como não aplicáveis.

## Pontos de entrada MCP úteis

- `find_symbol`: Use com o nome de uma função ou struct quando precisar da definição e de cada referência.
- `dependency_search`: Use a travessia incoming em uma função compartilhada antes de mudar sua assinatura ou o tratamento de erros.
- `get_task_context`: Use para prompts como "explique como um pacote vai da interrupção de recepção até o parser do protocolo".
