2016-12-19 8 views
0

에서 문자열을 정의 -DHELLO = \ "Hello \"및 -DHELLO = \\ "Hello \\"(다른 플랫폼에서 작동 함)에 대해 실패했습니다. 값을 -DVALUE = 12로 정의하면 문제없이 작동합니다.내가 다음과 같이 문자열을 정의하기 위해 노력하고있어 C/C++ 컴파일러 옵션에서 <p>GNU</p> 토네이도 2.2.1을 사용하여 컴파일러 옵션

누구나 토네이도에서 문자열을 정의하는 올바른 방법을 알고 있습니까?

+0

당신은'-DHELLO = "\"hello \ ""' – Amadeus

+0

을 시도해 보았습니까 @Amadeus :'-DHELLO = "\"hello \ ""'를 의미하지 않습니까? (즉, 안쪽 따옴표를 벗어남) –

+0

.. "작동하지 않습니까?" 그게 무슨 뜻 이죠? –

답변

0

이러한 매크로의 문제점은 일반적으로 문자열이 (C/C++ 의미에서) 전 처리기 기호가 아니라는 것입니다. C/C++에서는 선행 처리기 번호를 그대로 사용할 수 있지만 문자열 기호로 사용할 수 있기 때문에 실제로 숫자가 작동합니다 (이스케이프 된 따옴표를 추가하는 것 외에도) C/C++ 문자열로 변환하려면 문자열을 "문자열 화"해야합니다.

그래서,이 작동합니다 (추가 따옴표를 탈출하지 않고) :

#define _STRINGIZE(x) #x 
#define STRINGIZE(x) _STRINGIZE(x) 

string s = STRINGIZE(HELLO) 

(대신 매크로, 즉 "안녕하세요"stringized 매크로의 을 얻기 위해 이중 확장주의 @Hmodus : "HELLO"와 같은 이름) ​​