C语言中的宏问题

ran*_*pos 2 c macros c-preprocessor

我在C语言中遇到了麻烦.我尝试阅读一些材料,但它已经过了我的脑海.

例如:

#include <stdio.h>

#define A(x) ((x)?-1:0)

int main()
{
    int i = 2;
    int i2 = A(i)*i;
    printf("%d", i2);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

有人可以评论该代码,所以我知道发生了什么?或者,如果您有与注释代码类似的练习的链接,我可以从中学习,这将是伟大的.

unw*_*ind 5

扩展宏后,该i2行将如下所示:

int i2 = ((i) ? -1 : 0) * i;
Run Code Online (Sandbox Code Playgroud)

我认为双等于是一个错字.

并且由于该值i2,上述将采取三元表达式的第一部分,并评估-1 * 2这当然是-2.

一个想法是通过预处理器运行代码,并查看结果.有gcc,相关的命令行选项是-E.