什么是输出和准确的操作#

时间:2017-04-14 20:01:06

标签: c

此代码是否应该是可识别的#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;
}

1 个答案:

答案 0 :(得分:2)

C预处理器确实使用#作为运算符。它是一个字符串化运算符。

您的宏将采用b所需的任何标记,并将其转换为字符串文字。我最喜欢的就是调试:

#define print_int(a) printf(#a " = %d", a);

但是你的程序只表现出未定义的行为。让我们扩展宏:

printf("%d",ab+"b");

取一个整数(20),并将其用于针对字符串文字的指针运算。实际上过了文字的结尾,从而得到了不确定的行为。