# C στο Maguyva: γράφοι κλήσεων για κώδικα συστημάτων και ενσωματωμένων

Canonical source: https://maguyva.ai/el/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 υποστηρίζει C με AST, σύμβολα και γράφο, ώστε οι πράκτορες AI να παρακολουθούν συναρτήσεις, structs, συμπεριλήψεις και καλούντες σε κώδικα συστημάτων, υλικολογισμικού και βιβλιοθηκών.

## Στιγμιότυπο υποστήριξης

- Επίπεδο: Υποστήριξη AST και συμβόλων
- Προγραμματισμός
- Επεκτάσεις: .c, .h
- Πραγματική ανάλυση AST για αναζήτηση με επίγνωση σύνταξης και δομικό πλαίσιο.
- Τα επώνυμα σύμβολα τροφοδοτούν τη σημασιολογική αναζήτηση και τη διασταύρωση αναφορών. Η πλοήγηση στον γράφο είναι διαθέσιμη όταν είναι ενεργοποιημένη η εξαγωγή σχέσεων.
- Αυτή η γλώσσα συνεισφέρει σύμβολα και σχέσεις στην αναζήτηση με επίγνωση του γράφου· οι υποστηριζόμενοι τύποι ακμών διαφέρουν ανάλογα με τις εγγενείς δομές της.
- Διατίθενται τόσο ανάλυση AST όσο και εξαγωγή συμβόλων.

## Ιδανική χρήση

- Ομάδες υλικολογισμικού, ενσωματωμένων συστημάτων και λειτουργικών συστημάτων, όπου μια μικρή αλλαγή σε μια κοινή συνάρτηση μπορεί να φτάσει σε διαδρομές υλικού.
- Μακρόβιες βιβλιοθήκες C με δημόσιες κεφαλίδες, μακροεντολές εξαγωγής και πολλές εσωτερικές μονάδες μετάφρασης.
- Αναθεωρήσεις με υποστήριξη πρακτόρων, όπου το ερώτημα είναι: «ποιος το καλεί αυτό και μέσω ποιων κεφαλίδων;»

## Ροές εργασίας πρακτόρων

- Εύρεση όλων όσων καλούν μια συνάρτηση πριν αλλάξει η υπογραφή ή ο χειρισμός σφαλμάτων της.
- Χαρτογράφηση των αρχείων που συμπεριλαμβάνουν μια κεφαλίδα και των structs που χρησιμοποιούν.
- Παρακολούθηση ενός αιτήματος από έναν χειριστή διακοπών ή ένα σημείο εισόδου μέσα από τις συναρτήσεις που φτάνει.

## Γιατί η C χρειάζεται γράφο κλήσεων και όχι grep

Η C δεν έχει κλάσεις ή αρθρώματα για να οργανώνουν τον κώδικα. Η δομή βρίσκεται στις κλήσεις συναρτήσεων, στις κεφαλίδες και στα structs, και το ίδιο όνομα μπορεί να εμφανιστεί σε σχόλια, μακροεντολές και σταθερές συμβολοσειρών. Οι μακροεντολές εξαγωγής και επισημείωσης περιβάλλουν δηλώσεις, και εκεί σκοντάφτουν τα εργαλεία που αναλύουν μόνο καθαρή C. Για έναν πράκτορα, το ασφαλές πρώτο βήμα είναι ο γράφος κλήσεων.

Το Maguyva χτίζει αυτόν τον γράφο, ώστε ένας πράκτορας να βλέπει πού φτάνει μια συνάρτηση και τι φτάνει σε αυτήν πριν προτείνει μια αλλαγή.

## Τι εξάγει το Maguyva από τη C

Το Maguyva καλύπτει `.c` και `.h`. Οι ορισμοί συναρτήσεων εξάγονται ως σύμβολα, ενώ τα structs και τα unions μπορούν να επιλεγούν ως ορισμοί τύπων στη δομική αναζήτηση. Οι οδηγίες `#include` γίνονται σχέσεις εισαγωγής.

Οι μακροεντολές εξαγωγής και ορατότητας (μοτίβα όπως `FOO_API`, `DLLEXPORT` ή `LIBEXPORT`) και οι μακροεντολές επισημείωσης για ασφάλεια νημάτων (όπως `GUARDED_BY` και `REQUIRES`) καλύπτονται πριν από την ανάλυση, ώστε οι δηλώσεις που περιβάλλουν να αναλύονται κανονικά ως δηλώσεις. Τα σώματα των μακροεντολών τύπου συνάρτησης αναλύονται· τα σώματα των μακροεντολών τύπου αντικειμένου όχι.

Ο γράφος καταγράφει κλήσεις, συμπεριλήψεις, δημιουργία στιγμιοτύπων μέσω σύνθετων σταθερών, αναφορές τύπων, αναγνώσεις και εγγραφές, καθώς και ροή ελέγχου. Περίπου 124 κλήσεις της τυπικής βιβλιοθήκης της C (`printf`, `malloc`, `free`, `memcpy`, `strlen` και παρόμοιες) φιλτράρονται από τις σχέσεις, ώστε να ξεχωρίζει ο κώδικας του έργου.

## Παραδείγματα προτροπών για πράκτορες

- «Ποιος καλεί τη `uart_write`, απευθείας ή μέσω άλλων συναρτήσεων;» (`dependency_search` incoming)
- «Ποια αρχεία συμπεριλαμβάνουν το `config.h` και ποια structs του χρησιμοποιούν;» (`dependency_search`, μετά `find_symbol`)
- «Εξήγησε πώς ένα πακέτο περνά από τη διακοπή λήψης στον αναλυτή του πρωτοκόλλου.» (`get_task_context`)

## Γνωστοί περιορισμοί

- Η C δεν έχει κλάσεις ούτε εξαιρέσεις, οπότε οι σχέσεις κληρονομικότητας, υλοποίησης interface, επικάλυψης, ρίψης και σύλληψης σημειώνονται ως μη εφαρμόσιμες.
- Το `.h` εμφανίζεται στις λίστες επεκτάσεων της C, της C++ και της Objective-C, οπότε οι κεφαλίδες σε δέντρα πολλών γλωσσών μοιράζονται ανάμεσα σε αυτά τα προφίλ.
- Οι κλήσεις σε φιλτραρισμένες συναρτήσεις της τυπικής βιβλιοθήκης δεν είναι ακμές του γράφου. Χρησιμοποιήστε το `text_pattern_search` όταν χρειάζεστε κάθε `malloc` ή `memcpy`.

## Επόμενα βήματα

Συνδέστε ένα αποθετήριο με τον [γρήγορο οδηγό εκκίνησης](/el/docs/quickstart) και έπειτα δείτε τον πίνακα υποστήριξης στη [σελίδα συμβατότητας](/el/docs/compatibility). Για κώδικα C++ στο ίδιο δέντρο, διαβάστε τον [οδηγό για τη C++](/el/languages/cpp).

## Λεπτομέρειες μηχανής

- Η υποστήριξη C καλύπτει `.c` και `.h`. Οι ορισμοί συναρτήσεων είναι σύμβολα, τα structs και τα unions είναι ορισμοί τύπων, και το `#include` γίνεται σχέση εισαγωγής.
- Οι μακροεντολές εξαγωγής, ορατότητας και επισημείωσης ασφάλειας νημάτων καλύπτονται πριν από την ανάλυση, ώστε οι περιβαλλόμενες δηλώσεις να αναλύονται. Τα σώματα μακροεντολών τύπου συνάρτησης αναλύονται· τύπου αντικειμένου όχι.
- Περίπου 124 κλήσεις της τυπικής βιβλιοθήκης, όπως `printf`, `malloc` και `memcpy`, φιλτράρονται. Οι σχέσεις κληρονομικότητας, επικάλυψης και εξαιρέσεων σημειώνονται ως μη εφαρμόσιμες.

## Χρήσιμα σημεία εισόδου MCP

- `find_symbol`: Χρησιμοποιήστε το με όνομα συνάρτησης ή struct όταν χρειάζεστε τον ορισμό και κάθε αναφορά.
- `dependency_search`: Χρησιμοποιήστε διάσχιση incoming σε μια κοινή συνάρτηση πριν αλλάξει η υπογραφή ή ο χειρισμός σφαλμάτων της.
- `get_task_context`: Χρησιμοποιήστε το για προτροπές όπως «εξήγησε πώς ένα πακέτο περνά από τη διακοπή λήψης στον αναλυτή του πρωτοκόλλου».
