此代码是否应该是可识别的#token, 当我在不同的编译器上运行此代码时,它提供不同的输出。为什么呢?
#include <stdio.h>
#define foo(a,b) #b
int main(void) {
int a=10,b=15,ab=20;
// your code goes here
printf("%d",ab+foo(a,b));
return 0;
}
答案 0 :(得分:2)
C预处理器确实使用#
作为运算符。它是一个字符串化运算符。
您的宏将采用b
所需的任何标记,并将其转换为字符串文字。我最喜欢的就是调试:
#define print_int(a) printf(#a " = %d", a);
但是你的程序只表现出未定义的行为。让我们扩展宏:
printf("%d",ab+"b");
取一个整数(20),并将其用于针对字符串文字的指针运算。实际上过了文字的结尾,从而得到了不确定的行为。