2016-12-12 3 views
3

Ich versuche, einige einfache generische Strukturen in C mit Token-Einfügen zu definieren. Ein Beispiel davon ist unten: -Token pasting für generische Struktur

#define VECTOR(type, dimension, name) \ 
    typedef struct Vector_##type{ \ 
     type data[##dimension##]; \ 
     int dim = dimension; \ 
    }##name##; 
VECTOR(int, 3, Vector3i) 

Zu meinem Verständnis des Token-Einfügen ist notwendig, auf den Linien 2 und 5 aufgrund der Einbettung der Paramater, und ist auf der Linie 4 für den entgegengesetzten Grund nicht erforderlich.

Allerdings erscheine ich etwas in meinem Verständnis als einfaches Beispiel zu fehlen oben verursacht die folgenden Fehler: -

pasting formed '[3', an invalid preprocessing token VECTOR(int, 3, Vector3i) 

pasting formed '3]', an invalid preprocessing token VECTOR(int, 3, Vector3i) 

expected member name or ';' after declaration specifiers 
VECTOR(int, 3, Vector3i) 
~~~~~~~~~~~~^~~~~~~~~~~~ 

die obigen Fehler gegeben, was habe ich verpasst, und was ist der richtige Weg Generika zu definieren Strukturen in reinem C?

+2

'int dim = dim;' wird nicht funktionieren. –

+0

Das habe ich auch nach meiner Veröffentlichung gemerkt. Bearbeitet. –

Antwort

5

Sie benötigen die Token-Einfügeoperation für die Größe oder den Typnamen nicht.

Es wird verwendet, um ein einzelnes Token aus mehreren zu erstellen, so dass es für Vector_##type sinnvoll ist, ein einzelnes Token Vector_int zu erstellen.

Es macht keinen Sinn, in [##dim##] wo es eine einzelne[3] Token zu erstellen versuchen würde. Das sollten drei verschiedene und separate Token sein: [ gefolgt von 3 gefolgt von ], die Sie mit [dim] im Makro erhalten.

Es ist das gleiche mit dem typedef Namen nach der Struktur.

Verwandte Themen