如何将 #define 的精确文字存储在字符串中以进行打印

Jak*_*uin 0 c-preprocessor

#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)

abe*_*nky 5

您可以使用众所周知的“字符串化”预处理器符号的过程,如下所示。

#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)