#define fd(TYPE) \
typedef struct _s##TYPE s##TYPE;
#define imp(TYPE) \
struct _s##TYPE { \
TYPE value; \
};
fd(int);
imp(int);
fd(float);
imp(float);
이런 식으로 타입이름이 들어간 구조체를 선언한다고 할 때,
imp(int)를 두 번 중복 사용하면 구조체 재정의 때문에 에러가 나는데
이걸 막을 방도가 있음?
요컨대 인자가 있는 매크로 함수가 동일한 인자로 두 번 사용되면 그 두 번째 사용을 막는 방법?
#define 안에 헤더파일 중복 피할 때 처럼
#ifndef @@ ~~ #define @@ ~~ #endif
하더라도
저 @@ 이름이 각 인자에 맞게 구분되어질 수 있음?
조건부 컴파일 쓰면 되는거 아님?
저 아래에 적은 것처럼 ifnef define endif 쓰더라도 인자 이름을 뭘로 구분함?
이건 어떠냐? #define imp(TYPE) do{\ struct _s##TYPE {\ TYPE value; \ }; \ }while(0)
pragma once 쓰던가 header guard 쓰면 되잖어
헤더가드로 저 imp 매크로 안의 내용 중복을 막으려 해도 저 imp 매크로 인자에 따라서 그 안의 매크로 이름을 달리할 수 있음?
전처리기 사용해서 전처리 조건부를 만들 수 있는지 시도해본적은 없는데 아마 안될걸 그리고 귀찮더라도 저런 식으로 문법 줄이지 마. 별로 안좋은 습관이야. 정의를 헤더 파일 하나에만 하고 그 헤더파일을 필요할 때 소스파일에서 갖다 쓰는 방식으로 해라
전처리기는 정말 꼭 필요한 경우 아니면 쓰지 마라. 남발하면 코드 더러워지고 유지보수 힘들어진다.
설령 전처리기로 전처리기 조건부 놓는게 되더라도 열고 닫히는게 확실하다는건 어떻게 증명할거임? 너무 안좋은 발상이다.
막을 방법은 없고 그냥 한번만 정의하면 되잖아. 왜 두번 정의하나...