문제

다음 스 니펫은 프로젝트 값 (makefile에 정의)을 가져 와서 포함 파일 이름을 작성해야합니다. 예를 들어, project = classifier 인 경우, 마지막으로 projectIngstrsprestIfer_ir.h를 생성해야합니다.

접미사에서 밑줄을 사용하려고하지 않는 한이 코드가 작동한다는 것을 알게됩니다. 그러나 밑줄의 사용은 선택 사항이 아닙니다. 코드 기반은 어디에서나 사용합니다. 프로젝트에 대한 값이 제한되어 있기 때문에이 문제를 해결할 수 있지만 다음 스 니펫을 실제로 작동하는 방법을 알고 싶습니다. 탈출 할 수 있습니까?

#define PROJECT classifier

#define QMAKESTR(x) #x
#define MAKESTR(x) QMAKESTR(x)
#define MAKEINC(x) x ## _ir.h
#define PROJECTINC MAKEINC(PROJECT)
#define PROJECTINCSTR MAKESTR(PROJECTINC)

#include PROJECTINCSTR

편집 : 컴파일러는 project_ir.h가 아닌 classifier_ir.h를 포함 시키려고 노력해야합니다.

도움이 되었습니까?

해결책

#define QMAKESTR(x) #x
#define MAKESTR(x) QMAKESTR(x)
#define SMASH(x,y) x##y
#define MAKEINC(x) SMASH(x,_ir.h)
#define PROJECTINC MAKEINC(PROJECT)
#define PROJECTINCSTR MAKESTR(PROJECTINC)

다른 팁

이것은 나를 위해 작동합니다 :

#define QMAKESTR(x) #x
#define MAKESTR(x) QMAKESTR(x)
#define MAKEINC(x) x ## _ir.h
#define PROJECTINC(x) MAKEINC(x)
#define PROJECTINCSTR MAKESTR(PROJECTINC(PROJECT))

#include PROJECTINCSTR

그 베어 본 예제는 GCC (v4.1.2)와 함께 작동하며 "project_ir.h"를 포함하려고합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top