C / C ++ 매크로 연결에 의해 생성 된 문자열 포함 [중복]

Nov 14 2020

이름이 버전에 따라 달라지는 헤더 파일을 포함하려고합니다. 구체적인 이름은 문자열을 버전 번호와 연결하여 제공됩니다. 마지막 파일은 구성 파일을 사용하여 CMakeLists.txt에서 검색됩니다.

#include "config.h" # load PROJECT_VER
#define HEADERROOT "foo-"
#define HEADERBASENAME HEADERROOT PROJECT_VER
#define HEADER HEADERBASENAME ".h"
// Equivalent to: #define HEADER "foo-5.1.h"

생성 된 문자열은 정확하지만 포함 할 수 없습니다 (이전 명령문에 추가됨).

#include HEADER
#include <iostream>
using namespace std;

int main() {
    
    cout << HEADER << endl;
    return 0;
}

오류는

main.cpp:6:10: warning: extra tokens at end of #include directive
 #include HEADER
          ^~~~~~
main.cpp:6:16: fatal error: foo-: No such file or directory
 #include HEADER
                ^
compilation terminated.

답변

RemyLebeau Nov 14 2020 at 04:54

#include명령문 의 파일 이름을 정의하는 데 매크로를 사용할 수 없습니다 . 이러한 종류의 작업은 전 처리기 / 컴파일러가 호출되기 전에 필요한 소스 코드를 생성하는 외부 빌드 프로세스에서 더 잘 처리됩니다.