2016-12-12 7 views
3

토큰 붙여 넣기를 사용하여 C에서 간단한 일반 구조를 정의하려고합니다. 의 예는 다음과 같습니다 : - 나의 이해 토큰 붙여 넣기 인해 PARAMATERS의 삽입에 선 2 및 5에 필요하며, 반대의 이유로 4 호선 필요가 없습니다으로일반 구조체에 대한 토큰 붙여 넣기

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

. 위의 오류 감안할 때

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) 
~~~~~~~~~~~~^~~~~~~~~~~~ 

, 내가 놓친 어떤 것은 일반적인 정의 할 수있는 적절한 방법입니다 -이 : 나는 간단한 예로서 나의 이해에 뭔가를 놓친 것으로 나타 그러나

위의 다음과 같은 오류가 발생합니다 순수한 C 구조?

+2

'int dim = dim;'작동하지 않습니다. –

+0

게시 한 후에도이 사실을 알게되었습니다. 편집 됨. –

답변

5

크기 또는 유형 이름에 토큰 붙여 넣기 작업이 필요하지 않습니다.

실제로 여러 개의 단일 토큰을 만드는 데 사용되므로 Vector_##type의 경우 단일 Vector_int 토큰을 만드는 것이 좋습니다. 그것은 하나의[3] 토큰을 만들려고 할 경우

[##dim##]에서 이해가되지 않습니다. 그것은 세 가지 다른 분리 토큰이어야합니다 : [ 다음에 3이 이어지고 ]이 이어지고 매크로에 [dim]을 사용합니다.

구조 후 typedef 이름과 동일합니다.