문제

이것은 나에게 견과류를 몰고 있습니다.-D 옵션이있는 명령 줄에 매크로가 정의됩니다.

-DFOO="foobarbaz"
.

그리고 나서 나는 이렇게하고 싶습니다

string s = "FOO" ;
.

를 얻으려면

string s = "foobarbaz" ;
.

분명히 명령 줄의 따옴표는 \로 이스케이프를 벗어나려고 할 때에도 제거됩니다.나는 모든 것을 시도한 모든 것을 시도했고, 추가적인 매크로와 추가 매크로를 사용하지 않을 것입니다.i 전처리 기호에 대한 오류가 발생한 # 표지판에서 오류가 발생하거나

로 끝납니다.
string s = foobarbaz ;
.

은 분명히 컴파일되지 않습니다.

도움이 되었습니까?

해결책

명령 행에서 이것을 사용하십시오.

-DFOO="\"hello world\""
.

예 : test.cpp는 다음과 같습니다.

#include <cstdio>
#include <string>
#include <iostream>

std::string test = FOO;

int main()
{
    std::cout << test << std::endl;
    return 0;
}
.

컴파일 및 실행은 다음과 같습니다 :

$ g++ -DFOO="\"hello world\"" test.cpp
$ ./a.out 
hello world
.

편집 이것은 메이크 파일에서 어떻게 할 것인가 :

DEFS=-DFOO="\"hello world\""

test: test.cpp
    $(CXX) $(DEFS) -o test test.cpp
.

다른 팁

C 및 C ++ 전 처리기는 C 및 C ++로 조정되고, 이들은 이 아닌 원시, 바이트 바이트 전처리 자입니다.그들은 문자열을 인식하고 ("foo"에서와 같이) 일치하고 확장되지 않습니다.매크로를 확장하려면 문자열 밖에서 수행해야합니다.e.g.,

#define foo "bar"

#include <string>

int main () {
    std::string s = "Hello " foo "! How's it going?";
}
. 위의

위의

로 확장됩니다.
Hello bar! How's it going?
.

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