如何将字符串作为预处理器令牌传递? [重复]

问题描述 投票:0回答:1

我在编译这段代码时试图传递一个字符串作为参数:

#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...
传递参数,然后将其转换为字符串?

c++ preprocessor compiler-flags
1个回答
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;
}

另见这里更一般的情况。

© www.soinside.com 2019 - 2024. All rights reserved.