c - C 中的宏用法?

标签 c macros

我是 C 新手,正在尝试了解 C 中的宏扩展逻辑。 我想知道为什么第一种方法不起作用,但第二种方法却按预期工作。

第一种方法

#include <stdio.h>
#define square(x) x*x
int main()
{
    int x = 36/square(6); // Expended as 36/6*6
    printf("%d", x);
    return 0;
}
// Output: 36

第二种方法

#include <stdio.h>
#define square(x) x*x
int main()
{
    int x = square(6)/36; // Expended as 6*6/36
    printf("%d", x);
    return 0;
}
// Output: 1

有人可以解释一下其中的区别吗?

最佳答案

square(6)/36

扩展为

6*6/36

这相当于

(6*6)/36

显然等于1

尽管这显然是为了理解宏并且您可能已经意识到这一点,但有一个建议:
涉及运算符的宏应该用括号括起来!

关于c - C 中的宏用法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34242270/

相关文章:

C++ 宏 - 作为 "parameter"下一个单词而不是 in () 传递

c++ - 预定义宏的 __FILE__、__LINE__、__func__、stringify(#) 是如何工作的?

c# - 在 O(n) 时间内创建链表的拷贝

c - 包含在头文件中

c - 除非我使用 if 语句终止,否则为什么我的左移函数会出现段错误?

c - 了解不同的#define 声明

c++ - Linux下如何创建和监控子进程?

创建多个内核线程——不使用 pthread

macros - 如何在构建后事件中使用宏区分 TFS 构建和手动构建

c++ - 为什么arduino对某些 'functions'使用宏,例如min(),max(),constrain()?