我在编译代码时尝试将字符串作为参数传递:
#include <iostream>
#define MY_STRING #STRING_IN
int main(int argc, char** argv) {
std::cout << MY_STRING;
}
使用标志
编译-DSTRING_IN=foo
我收到以下错误
错误:在程序中迷路'#'
#define MY_STRING #STRING_IN
^
注意:扩展宏'MY_STRING'
std::cout << MY_STRING; ^~~~~~~~~
[...]
编译器返回:1
另见here。
如何通过-D...
传递参数然后将其转换为字符串?
答案 0 :(得分:3)
嗯,我在发布之前尝试了很多组合,只是不正确的... 当我按照这样对字符串进行字符串化时,它可以工作:
#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;
}
有关更一般的情况,另请参阅here。