Jak se dostat do funkce jména z Linux záhlaví se nachází v / usr / include

hlasů
1

Máme většinu GNU C Library záhlaví ve /usr/include
jsem hledal způsob, jak otevřít a číst soubor zahrnout a analyzovat ji vytisknout všechny deklarované funkce, které jsou umístěny uvnitř.
a může někdo vysvětlit, nebo poskytnout odkaz mluví o tom formátování záhlaví.
Dělám to proto, že se snažím dělat C Automatické dokončování plugin, ve kterém, když obsahují file.h plug-in mi dá všechny funkce jsou umístěny v file.h.

Položena 20/10/2010 v 19:02
zdroj uživatelem
V jiných jazycích...                            


7 odpovědí

hlasů
8

Všichni nakonec požádá o nástroj, jako je tento alespoň jednou ve své kariéře; něco, co se bude testovat C zdrojový kód a vytisknout výpis funkce / názvů proměnných nebo křížového odkazu funkce volání mezi různými moduly.

Přiměřeně to, co se ptáte, budete muset napsat, co je v podstatě C kompilátor front end; žádné množství regulární výraz magie se chystá dát to, co chcete. Chytit yaccschopen verzi jazyka C gramatiky a womp až parser pomocí lexa yacc(nebo flexa bisonnebo vaše nástroje volby). Nicméně, když se zápas deklaraci funkce, namísto generování strojové instrukce budete jen vytisknout (nebo uložit do databáze, nebo něco takového).

Spusťte záhlaví zájmu prostřednictvím stávajícího C preprocesor (např gcc -E) vyřadit komentáře a dělat žádnou makro expanzi, pak krmení výsledný soubor do analyzátoru.

UPRAVIT

A teď, když jsem vlastně jít přečíst gccmanuálové stránky, je tu možnost -aux-info, že bude psát prohlášení prototypem všech funkcí deklarovaných / definovaných v překladové jednotce, včetně těch deklarovaných v zahrnutých hlavičkových souborů. Ještě lepší je, že výstup je poněkud zformátovaný a pravidelný a má být poměrně snadno analyzovat.

Takže ponaučení: zkontrolujte kompilátor dokumentace a ignorovat staré prdy, jako jsem já, kteří si stále myslí, pokud jde o ‚80.-vintage nástrojů.

Odpovězeno 20/10/2010 v 19:44
zdroj uživatelem

hlasů
2

Doxygen to může udělat. Obvykle je to běh na zdroj uhlíku, který byl komentovaný v její prospěch, ale také to může produkovat dokumentace z kódu bez značek a můžete analyzovat jeho výstup ve formátu XML (nebo jiných formátů) s nástroji dle vašeho výběru. Popadat XML parser z regálu a integrovat je do vaší aplikace je jednodušší, než psát C parser.

Mimochodem, nemusí být moudré pro C automatické dokončování plugin navrhnout věci, které jen tak náhodou v záhlaví souboru ve vaší implementaci, ale které nejsou určená podle kteréhokoli z (a) C standard, (b ) POSIX standard, (c) GNU rozšíření dokumentace. Osobně bych léčit standardní záhlaví jako zvláštní případ pro automatické dokončování. Mají dobře definované rozhraní, které uvádějí všechny funkce, měli byste očekávat, že bude tam, ale mohou také obsahovat vlastní implementace haraburdí.

Že soukromé nevyžádané pošty budou mít vyhrazené názvy, i když, takže si mohl pokračovat, ale vyloučit vyhrazené názvy.

Odpovězeno 20/10/2010 v 20:13
zdroj uživatelem

hlasů
1

Glibc v záhlaví jsou notoricky složité, mají spoustu indirection, tak bych asi, že jsou asi nejhorší za něco podobného, ​​co se snažíte udělat.

To znamená, že cscopemi dává rozumný výstup pro jednoduchý test s použitím string.h:

$ cscope -bcq /usr/include/string.h
$ cscope -d -L1strcat
/usr/include/string.h strcat 92 extern char *strcat (char *__restrict __dest, __const char *__restrict __src)
/usr/include/bits/string.h strcat 963 #define strcat(dest, src) \
/usr/include/bits/string3.h strcat 164 #define strcat(dest, src) \

První cscope vyvolání je pro generování databáze cscope, druhá je příkazového řádku cscope vyhledávání pro globální identifikátory (ano, to je 1 unintuitive).

Odpovězeno 20/10/2010 v 21:49
zdroj uživatelem

hlasů
0

Jak se o použití skutečného kompilátor analyzovat? Myslím, že se jedná o velmi slibný vývoj:

http://codesynthesis.com/~boris/blog/2010/05/03/parsing-cxx-with-gcc-plugin-part-1/

Oh, a další možností by bylo podívat se na Informace o ladění v objektových souborů.

Odpovězeno 20/10/2010 v 20:19
zdroj uživatelem

hlasů
0

Napsat lexer a YACCer, který kontroluje zdroje vývojáře a přiřazuje k nim se zdrojovým kódem od developera $ include_path.

Soubory v cestě zahrnují mají stejný formát jako normální hlavičkové soubory. Klíčová slova jsou stejné; ale můžete narazit na slova jako ‚externí‘, které nemusí být všední aby začátečník programátor. Navrhuji, abyste mít kompletní znalosti o klíčová slova a pochopit jejich funkčnost na různých místech v hlavičkových souborech.

ps: Pro více komplexní řešení, budete muset vzít v úvahu podmíněné makra.

Na zdraví.

Odpovězeno 20/10/2010 v 20:02
zdroj uživatelem

hlasů
0

Sekce 0pz manuálových stránek obsahuje manuálové stránky pro POSIX hlaviček, spolu s tím, co je (nebo spíše by měl být ) definována v každé z nich.

Odpovězeno 20/10/2010 v 19:24
zdroj uživatelem

hlasů
0

Pokud si chcete určité standardní knihovně modulů, Google je. Například:

http://www.cplusplus.com/reference/clibrary/cstring/

To byl první výsledek Googling „string.h“. Má podrobnosti o všech funkcích uvedených v CString.

Chcete-li sledovat všechny funkce ve všech hlaviček ve všech podadresářích / usr / include, mohu vám krátký bash skript, aby tak učinily, ale nemám opravdu vidět smysl.

Na zdraví!

Edit: nebo Zack uvedl výše, je tu standardní knihovna manuál . Dobré spojení, Zack!

Odpovězeno 20/10/2010 v 19:13
zdroj uživatelem

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more