我是 C 语言新手。当我学习 C 语言时,我学习了一种叫做宏的东西。据我了解,宏就像 JavaScript 中的函数,我们可以在需要时调用。但后来我了解到,编译程序后,我调用宏的所有位置都被宏的定义所替换。所以我很困惑C语言中的宏和函数有什么区别。
我还想知道是否可以在代码中编写多行宏,如果可以的话,在代码编译时将如何替换它。
举个例子,假设我想要宏查找两个数字之间的最大值
。
将该过程编写为宏而不是将其编写为函数是一个好习惯吗?
最佳答案
一切正常 - 不要使用宏。更好的替代方法内联
函数 - 它会达到您期望的相同效率。但为了好玩,我做了一些工作来使用 gcc statement expressions
这意味着一个不可移植的以 gcc 为中心的解决方案。
#include <stdio.h>
#define SUM(X) \
({ long s = 0; \
long x = (X) > 0 ? (X) : (-(X)); \
while(x) { \
s += x % 10; \
x /= 10; \
} \
s; \
})
int main(void) {
printf("%ld\n",SUM(13423) );
return 0;
}
这个解决方案需要一个函数。使用语句表达式在宏内返回
某些功能。好吧,我说,选择内联函数。这将以更干净的方式达到目的。
关于c - C语言中宏和函数的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49092361/