C#define宏

3 c operator-precedence c-preprocessor

这就是我所拥有的,我想知道它是如何工作的以及它实际上做了什么.

#define NUM 5
#define FTIMES(x)(x*5)

int main(void) {
    int j = 1;
    printf("%d %d\n", FTIMES(j+5), FTIMES((j+5)));
}
Run Code Online (Sandbox Code Playgroud)

它产生两个整数:26和30.

它是如何做到的?

Cod*_*ous 17

发生这种情况的原因是因为您的宏将打印扩展为:

printf("%d %d\n", j+5*5, (j+5)*5);
Run Code Online (Sandbox Code Playgroud)

含义:

1+5*5 and (1+5)*5
Run Code Online (Sandbox Code Playgroud)


Gre*_*ill 12

由于尚未提及,解决此问题的方法是执行以下操作:

#define FTIMES(x) ((x)*5)
Run Code Online (Sandbox Code Playgroud)

x宏扩展中的括号可以防止操作员关联性问题.