Erstellt GCC typedefs für Arrays, die an Funktionen übergeben werden?

9

Beim Debuggen von C-Code mit gdb bin ich auf etwas gestoßen, das ich noch nie gesehen oder gehört habe! Der Compiler (gcc -O0) scheint einen neuen Typ für die Übergabe eines Arrays von Vektoren an eine Funktion erstellt zu haben ... Ich denke! Sehen Sie sich die folgenden Code- und gdb-Informationen an:

%Vor%

Ich setze einen Haltepunkt innerhalb der gui_shader_draw-Funktion und das sehe ich:

%Vor%

Woher kam quad_t? Es ist sicherlich kein Typdef in meinem Code. Der Systemkopf sys / types.h hat einen quad_t-Alias ​​(long int), aber das scheint überhaupt nicht zu sein! Was ist los? Habe ich etwas offensichtlich übersehen?

EDIT 1: Ich muss darauf hinweisen, dass der Code kompiliert und gut funktioniert. Es gibt keine Konflikte mit einer anderen Variablen oder einem Typ namens quad_t. Ich bin nur neugierig darauf, was GCC getan hat und warum.

EDIT 2: Wie vorgeschlagen, habe ich einen Blick auf die Ausgabe des Präprozessors geworfen und tatsächlich wurden alle Instanzen von 'Vector quad [4]' in 'Vector quad_t [4]' geändert, also hat sich der Name geändert, nicht der Typ .

%Vor%

In der Präprozessorausgabe gibt es keine typedefs, die 'quad_t' genannt werden. Aber ich fand das in sys / types.h (was ich vorher vermisste - d'oh!)

%Vor%     
x-x 10.10.2010, 08:37
quelle

1 Antwort

4

Was in Ihrem Code passiert, hat absolut nichts mit typedefs zu tun, da die Änderung in keiner Weise mit irgendwelchen Typen zusammenhängt. Was sich geändert hat, ist der Name des Funktionsparameters, nicht sein Typ, was sofort aus der Debugger-Ausgabe hervorgeht.

Da Sie diese Änderung in der Präprozessorausgabe sehen, ist die einzige vernünftige Erklärung, dass irgendwo im Code ein

ist %Vor%

Sie müssen also nach #define s für quad , nicht nach quad_t suchen. Es ist unnötig zu sagen, dass #define in der Präprozessorausgabe nicht vorhanden ist. Sie müssen eine globale Suche in allen enthaltenen (sowohl direkt als auch indirekt) Headerdateien durchführen.

    
AnT 10.10.2010, 22:01
quelle