在 C 中处理宏

问题描述 投票:0回答:1

没有括号的宏让我很困惑

#include <stdio.h>
#define Inverse(A) -A

int main(void)
{
    int x = 8;
    
    int y = -Inverse(x+3);
    printf("%d", y);
}

Inverse() 前面的一元否定运算符让我感到困惑。 我以为结果是 -逆(x+3) 会是 --x+3 即 10 (7+3)

c macros
1个回答
1
投票

如果我们扩展您的宏,我们会看到:

int main(void)
{
    int x = 8;

    int y = - -x+3;
    printf("%d", y);
}

-
符号没有放在一起,因此它们不会被解析为预减运算符。两个一元
-
运算符抵消,因此输出为
11

© www.soinside.com 2019 - 2024. All rights reserved.