매크로의 확장 된 값을 인용합니다
-
12-12-2019 - |
문제
이것은 나에게 견과류를 몰고 있습니다.-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?
. 제휴하지 않습니다 StackOverflow