gpt4 book ai didi

c - 什么时候应该使用宏而不是内联函数?

转载 作者:太空狗 更新时间:2023-10-29 16:39:57 26 4
gpt4 key购买 nike

在之前的question我认为好的答案因建议使用宏而被否决

#define radian2degree(a) (a * 57.295779513082)
#define degree2radian(a) (a * 0.017453292519)

而不是内联函数。请原谅新手问题,但在这种情况下宏有什么不好?

最佳答案

大多数其他答案都讨论了为什么宏是邪恶的,包括您的示例如何具有常见的宏使用缺陷。这是 Stroustrup 的观点:http://www.research.att.com/~bs/bs_faq2.html#macro

但是您的问题是询问宏仍然有什么用处。有些事情宏比内联函数更好,这就是您可以做内联函数无法完成的事情的地方,例如:

  • token 粘贴
  • 处理行号等(例如在 assert() 中创建错误消息)
  • 处理非表达式的事物(例如,有多少 offsetof() 的实现使用类型名称来创建强制转换操作)
  • 获取数组元素计数的宏(不能用函数来完成,因为数组名称很容易衰减为指针)
  • 在模板不可用的情况下,在 C 语言中创建类似于“类型多态”的函数

但是对于具有内联函数的语言,更常见的宏用法应该是不必要的。在处理不支持内联函数的 C 编译器时,我什至不愿意使用宏。如果可能的话,我尽量不使用它们来创建与类型无关的函数(而是创建多个函数,并将类型指示符作为名称的一部分)。

我还开始使用枚举来代替 #define 来命名数字常量。

关于c - 什么时候应该使用宏而不是内联函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1640344/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com