Salve, vorrei avere un chiarimento sulla sintassi del C. In particolare vorrei sapere cosa rappresenta:
__attribute__((__cdecl__))
Questa espressione la si trova nelle dichiarazioni di tipo di variabili e di funzioni negli header della libreira standard, però non ho capito che funzione ha __attribute__, dal punto di vista sinttattico, ad esempio nella dichiarazione di prototipo:
codice:
FILE* __attribute__((__cdecl__)) fopen (const char*, const char*);
oppure in questa dichiarazione:
codice:
typedef int _G_int16_t __attribute__ ((__mode__ (__HI__)));
qual è il significato sintattico dei vari termini?
Come compilatore ho usato il gcc e il mingw.
Altri identificatori che appaiono sono __extension__, per esempio:
codice:
__extension__ typedef int __intptr_t;
Inolte nella dichiarazione:
codice:
typedef int (*__gconv_trans_init_fct) (void **, const char *);
si sta definendo il tipo
__gconv_trans_init_fct
come il tipo di puntatore a funzione che prende come argomenti un void** e un char* e restituisce un int, giusto?
Tra l'altro vorrei sapere se tale codice è codice standard, oppure si tratta di estensioni e parole chiavi devi vari compilatori; cioè se un espressione come:
codice:
typedef int _G_int16_t __attribute__ ((__mode__ (__HI__)));
è sintatticamente conforme alla specifica grammaticale del C, tenendo presente che si tratta di codice che è stato prerpocessato, quindi tutte le macro sono gia state espanse.
Il tutto mi serve per un traduttore di codice C che deve quindi fare anche un po di parsing e quindi vorrei capire cosa fa parte della grammatica del C e cosa no, e se sapete dove posso trovare una specifica formale della grammatica del C adottata dal gcc.
grazie e ciao.
programma di parsing di codice C