我在编译这段代码时试图传递一个字符串作为参数:
#include <iostream>
#define MY_STRING #STRING_IN
int main(int argc, char** argv) {
std::cout << MY_STRING;
}
它是用标志编译的:
-DSTRING_IN=foo
我收到以下错误:
error: stray '#' in program #define MY_STRING #STRING_IN ^ note: in expansion of macro 'MY_STRING' std::cout << MY_STRING; ^~~~~~~~~ [...] Compiler returned: 1
另见这里.
-D...
传递参数,然后将其转换为字符串?
好吧,我在发帖之前尝试了很多组合,只是不正确... 当我像这样对令牌进行字符串化时它会起作用:
#include <iostream>
#define STRINGIFY(x) #x
#define TOSTRING(x) STRINGIFY(x)
#define MY_STRING TOSTRING(STRING_IN)
int main(int argc, char** argv) {
std::cout << MY_STRING;
}
另见这里更一般的情况。