带有()和{}的C预处理器宏代码

Jin*_*aul 6 c

#include <stdio.h>
#define a (1,2,3)
#define b {1,2,3}

int main()
{
    unsigned int c = a;
    unsigned int d = b;
    printf("%d\n",c);
    printf("%d\n",d);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

上面的C代码将打印输出为31.

但是,如何#define a (1,2,3)#define b {1,2,3}采取= 3,B = 1不生成警告,以及如何(){}被赋予不同的值?

Afs*_*hin 8

请记住,预处理器只是替换宏.因此,在您的情况下,您的代码将转换为:

#include <stdio.h>

int main()
{
    unsigned int c = (1,2,3);
    unsigned int d = {1,2,3};
    printf("%d\n",c);
    printf("%d\n",d);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

在第一种情况下,您从,运算符获得结果,因此c将等于3.但在第二种情况下,您获得了初始化列表的第一个成员d,因此您将得到1结果.

如果将代码编译为,则第二行会产生错误c++.但似乎你可以编译这段代码c.