我正在尝试使用字符串化运算符#,但我收到错误stray ‘#’ in program
。以下是我如何使用它。
#define STR "SOME_STRING"
#define BM 8
#define NUM_OF_THREADS 8
#define VER_STR (STR #BM #NUM_THREADS)
我希望SOME_STRING88
获得VER_STR
,但会收到错误。我在做什么错误?
答案 0 :(得分:9)
您需要将数字常量转换为字符串。但是,#BM
是一个错误,因为语法仅对宏参数有效。
因此,您需要通过中间宏强制扩展。你也可以用一个STRINGIFY宏来做到这一点:
#include <iostream>
#define STRINGIFY_(x) #x
#define STRINGIFY(x) STRINGIFY_(x)
#define STR "SOME_STRING"
#define BM 8
#define S_BM STRINGIFY(BM)
#define NUM_OF_THREADS 8
#define S_NUM_OF_THREADS STRINGIFY(NUM_OF_THREADS)
#define VER_STR STR S_BM S_NUM_OF_THREADS
int main() {
// your code goes here
std::cout << VER_STR;
return 0;
}
看到上述操作
修改强>
正如Magnus Hoff所指出的那样,你也可以直接调用STRINGIFY:
#define VER_STR STR STRINGIFY(BM) STRINGIFY(NUM_OF_THREADS)