c - C语言中宏和函数的区别

标签 c function macros

我是 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/

相关文章:

c - At&T Assembly 索引数组和声明数组

c - 简单的字符串复制,但 memcpy 不起作用

android - 使用 onClick 按钮更改 EditText 的值?

macros - 定义匹配扩展器

macros - 是否可以使用 "namespace"Rust 宏?

c - 使用 C 和 sysfs 库的串行通信 Arduino-Raspberry 中的错误数据

将 uint16_t 转换为 unsigned int

javascript - 计时器仅在第二次单击后停止?

c++ - 搜索列表中的最后一个数据实例

c - 特定于函数的 C 宏是否应该在函数范围内定义和取消定义?