macro가 preprocessor directive로 확장되게 할수도 있을까요?

freezm7의 이미지

예를 들어,

#define IF_NOT_DEFINED_ZERO(X) \
        #ifndef X \
                #define X 0 \
        #endif

위의 코드는 에러가 나던데요.
위의 코드가 의도하는 것처럼,
IF_NOT_DEFINED_ZERO 가 다시 또 macro directive로 확장되는 이런 구문이 가능할까요?

GNU CPP 매뉴얼을 봐서는 불가능해 보이는데, 혹시나 하는 마음에 올려봅니다.

cinsk의 이미지

안됩니다. macro로 치환된 결과는 다시 preprocessor directive(전처리기 지시어)로 인식될 수 없습니다. (pragma operator 제외)

cinsk의 이미지

원하시는 것처럼 강력한? 매크로 치환 기능을 원하시면 m4 등을 써서 source를 preprocessing하는 방법도 있습니다.