C 不了解输出是如何生成的
我希望输出(或愚蠢值)为C 不了解输出是如何生成的,c,c-preprocessor,parentheses,operator-precedence,C,C Preprocessor,Parentheses,Operator Precedence,我希望输出(或愚蠢值)为36。但我得到的是14。当我添加括号时,这是固定的:#定义事物(4+2) 但我仍然想知道没有括号时会发生什么,以及为什么我会得到14 . 以下是我的代码: #include <stdio.h> #include <stdlib.h> #define THING 4+2 int main(void) { int silly = THING * THING; printf("%d", silly); return EXI
36
。但我得到的是14
。当我添加括号时,这是固定的:#定义事物(4+2)
但我仍然想知道没有括号时会发生什么,以及为什么我会得到14
.
以下是我的代码:
#include <stdio.h>
#include <stdlib.h>
#define THING 4+2
int main(void)
{
int silly = THING * THING;
printf("%d", silly);
return EXIT_SUCCESS;
}
#包括
#包括
#定义事物4+2
内部主(空)
{
int傻=东西*东西;
printf(“%d”,愚蠢);
返回退出成功;
}
请记住,宏被完全替换(替换)到代码中。宏被直接插入到
东西的位置
THING*THING
是4+2*4+2
是4+(2*4)+2
是14
如果希望结果为36,则需要定义用括号括起来的宏:
#define THING (4 + 2)
因为宏(几乎)与文本替换相同<代码>智力愚蠢=事物*事物代码>由预处理器转换为int=4+2*4+2
,操作顺序表示被处理为4+(2*4)+2
,而不是(4+2)*(4+2)
,因为操作顺序相互干扰,所以需要括号。宏只替换文本,因此如果没有括号,操作将不会按照预期的顺序进行计算
THING * THING ----> 4 + 2 * 4 + 2 = 14
因此,一旦使用括号,就会修复它,因为它变成:
THING * THING ----> (4 + 2) * (4 + 2) = 36
这是可以解释的
THING * THING ----> (4 + 2) * (4 + 2) = 36