# C-tuki Maguyva-palvelussa: kutsugraafit järjestelmä- ja sulautetulle koodille

Canonical source: https://maguyva.ai/fi/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 tukee C-kieltä AST-jäsennyksellä, symboleilla ja graafilla, jotta tekoälyagentit voivat seurata funktioita, rakenteita, include-lauseita ja kutsujia järjestelmä-, laiteohjelmisto- ja kirjastokoodissa.

## Tukikatsaus

- Taso: AST- ja symbolituki
- Ohjelmointi
- Päätteet: .c, .h
- Oikea AST-jäsennys syntaksitietoiseen hakuun ja rakenteelliseen kontekstiin.
- Nimetyt symbolit syöttävät semanttista hakua ja ristiviittauksia. Graafinavigointi on käytettävissä, kun suhteiden poiminta on käytössä.
- Tämä kieli tuo symboleja ja suhteita graafia hyödyntävään hakuun; tuetut reunatyypit vaihtelevat kielen omien rakenteiden mukaan.
- Sekä AST-jäsennys että symbolien poiminta ovat käytettävissä.

## Parhaiten sopii

- Laiteohjelmisto-, sulautettujen järjestelmien ja käyttöjärjestelmätiimit, joissa pieni muutos jaettuun funktioon voi ulottua laitteistopolkuihin asti.
- Pitkäikäiset C-kirjastot, joissa on julkisia otsakkeita, vientimakroja ja paljon sisäisiä käännösyksiköitä.
- Agenttiavusteiset katselmoinnit, joissa kysymys kuuluu: "kuka kutsuu tätä, ja minkä otsakkeiden kautta?"

## Agenttien työnkulut

- Löytää kaikki funktion kutsujat ennen kuin sen allekirjoitusta tai virheenkäsittelyä muutetaan.
- Kartoittaa, mitkä tiedostot sisällyttävät otsakkeen ja mitä rakenteita ne käyttävät.
- Jäljittää pyyntö keskeytyskäsittelijästä tai aloituskohdasta niiden funktioiden läpi, joihin se ulottuu.

## Miksi C tarvitsee kutsugraafin eikä grepiä

C:ssä ei ole luokkia eikä moduuleja koodin järjestämiseen. Rakenne on funktiokutsuissa, otsakkeissa ja rakenteissa, ja sama nimi voi esiintyä kommenteissa, makroissa ja merkkijonoliteraaleissa. Vienti- ja annotaatiomakrot ympäröivät esittelyjä, mikä kompastuttaa työkalut, jotka osaavat jäsentää vain puhdasta C:tä. Agentille turvallinen ensimmäinen askel on kutsugraafi.

Maguyva rakentaa tämän graafin, jotta agentti näkee, mihin funktio ulottuu ja mikä siihen ulottuu, ennen kuin se ehdottaa muutosta.

## Mitä Maguyva poimii C:stä

Maguyva kattaa tiedostot `.c` ja `.h`. Funktioiden määrittelyt poimitaan symboleina, ja rakenteet ja unionit voi valita tyyppimäärittelyinä rakenteellisessa haussa. `#include`-direktiiveistä tulee tuontisuhteita.

Vienti- ja näkyvyysmakrot (mallit kuten `FOO_API`, `DLLEXPORT` tai `LIBEXPORT`) ja säieturvallisuuden annotaatiomakrot (kuten `GUARDED_BY` ja `REQUIRES`) peitetään ennen jäsennystä, joten niiden ympäröimät esittelyt jäsennetään edelleen esittelyinä. Funktiomaisten makrojen rungot jäsennetään, oliomaisten makrojen rungot eivät.

Graafi tallentaa kutsut, include-lauseet, yhdysliteraaleilla tehdyn ilmentymien luonnin, tyyppiviittaukset, luvut ja kirjoitukset sekä ohjausvuon. Noin 124 C:n standardikirjaston kutsua (`printf`, `malloc`, `free`, `memcpy`, `strlen` ja vastaavat) suodatetaan pois suhteista, jotta projektin koodi erottuu.

## Esimerkkikehotteita agenteille

- "Kuka kutsuu funktiota `uart_write` suoraan tai muiden funktioiden kautta?" (`dependency_search` incoming)
- "Mitkä tiedostot sisällyttävät otsakkeen `config.h`, ja mitä sen rakenteita ne käyttävät?" (`dependency_search`, sitten `find_symbol`)
- "Selitä, miten paketti kulkee vastaanottokeskeytyksestä protokollajäsentimeen." (`get_task_context`)

## Tunnetut rajoitukset

- C:ssä ei ole luokkia eikä poikkeuksia, joten periytymisen, rajapintojen toteutuksen, ylikirjoituksen, heittämisen ja kiinniottamisen suhteet on merkitty soveltumattomiksi.
- `.h` on C:n, C++:n ja Objective-C:n tiedostopäätteiden luetteloissa, joten monikielisten puiden otsakkeet jaetaan näiden profiilien kesken.
- Suodatettujen standardikirjaston funktioiden kutsut eivät ole graafin kaaria. Käytä työkalua `text_pattern_search`, kun tarvitset jokaisen `malloc`- tai `memcpy`-kutsun.

## Seuraavat vaiheet

Yhdistä repositorio [pikaoppaan](/fi/docs/quickstart) avulla ja tarkista sitten tukimatriisi [yhteensopivuussivulta](/fi/docs/compatibility). Saman puun C++-koodia varten lue [C++-opas](/fi/languages/cpp).

## Moottorin yksityiskohdat

- C-tuki kattaa tiedostot `.c` ja `.h`. Funktioiden määrittelyt ovat symboleja, rakenteet ja unionit tyyppimäärittelyjä, ja `#include`-direktiivistä tulee tuontisuhde.
- Vienti-, näkyvyys- ja säieturvallisuusmakrot peitetään ennen jäsennystä, joten ympäröidyt esittelyt jäsennetään. Funktiomaisten makrojen rungot jäsennetään, oliomaisten eivät.
- Noin 124 standardikirjaston kutsua, kuten `printf`, `malloc` ja `memcpy`, suodatetaan pois. Periytymisen, ylikirjoituksen ja poikkeusten suhteet on merkitty soveltumattomiksi.

## Hyödylliset MCP-liittymäkohdat

- `find_symbol`: Käytä sitä funktion tai rakenteen nimellä, kun tarvitset määrittelyn ja jokaisen viittauksen.
- `dependency_search`: Käytä incoming-läpikäyntiä jaettuun funktioon ennen sen allekirjoituksen tai virheenkäsittelyn muuttamista.
- `get_task_context`: Käytä sitä kehotteisiin kuten "selitä, miten paketti kulkee vastaanottokeskeytyksestä protokollajäsentimeen".
