使用C预处理器宏构建字符串

时间:2019-04-11 15:43:26

标签: c

以下代码来自C Puzzle书(基本类型1.1。)。我无法正常工作。

#include <stdio.h>

#define PRINT(format,x) printf("x = %format\n",x)

int integer = 5;
char character = '5';
char *string = "5";

main(){
    PRINT(d,string); PRINT(d,character); PRINT(d,integer);
    PRINT(s,string); PRINT(c,character); PRINT(c,integer=53);
    PRINT(d, ( '5' > 5 ));

    {
        int sx = -9;
        unsigned ux = -8;
        PRINT(o,sx); PRINT(o,ux);
        PRINT(o, sx>>3); PRINT(o, ux>>3 );
        PRINT(d, sx>>3); PRINT(d, ux>>3 );
    }
}

问题是第三行中的宏:#define PRINT(format,x) printf("x = %format\n",x)

  • 当前(符合标准的)C预处理器是否不支持在字符串文字中进行替换?
  • 您可以重新定义宏,以便其余代码无需任何进一步更改即可工作吗?

1 个答案:

答案 0 :(得分:4)

真正的问题是,任何 C预处理器是否曾经在字符串文字中进行过替换。我从没碰过。

需要使用#进行字符串化:

#define PRINT(format,x) printf(#x " = %" #format "\n", (x))
相关问题