Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 不了解输出是如何生成的_C_C Preprocessor_Parentheses_Operator Precedence - Fatal编程技术网

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