#define图书馆深处有一个宏,我想快速知道它的确切值。有没有办法将定义的值存储到字符串中以便我可以打印它?
#define intgr 12
#define bnry 0b00000001
#define hex 0x0A
#define str "Hello World"
String myStr;
myStr = intgr;
cout<< myStr << endl; //Simple enough, work no problem
//12 <- actual
//12 <- expected
myStr = bnry; // using "bnry" would not work as #define does not touch inside quotes
cout<< myStr << endl;
//1 <- actual
//0b00000001 <- expected
myStr = hex;
cout<< myStr << endl;
//10 <- actual
//0x0A <- expected
myStr = str;
cout<< myStr << endl;
//Hello World <- actual
//"Hello World" <- expected, must include the quotation
Run Code Online (Sandbox Code Playgroud)
您可以使用众所周知的“字符串化”预处理器符号的过程,如下所示。
#include <stdio.h>
#define intgr 12
#define bnry 0b00000001
#define hex 0x0A
#define str "Hello World"
#define STRING(x) #x
#define STRINGIZE(x) STRING(x)
int main(void) {
char* strintgr = STRINGIZE(intgr);
char* strbnry = STRINGIZE(bnry);
char* strhex = STRINGIZE(hex);
char* strstr = STRINGIZE(str);
printf("%s\n", strintgr);
printf("%s\n", strbnry);
printf("%s\n", strhex);
printf("%s\n", strstr);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
链接到 IDEOne 代码链接到C
IDEOne 代码C++
PS我使用了C语法和char*类型,但是,在预处理器宏之后,C++ 输出和string类型应该也能正常工作。
12
0b00000001
0x0A
"Hello World"
Run Code Online (Sandbox Code Playgroud)