c - 学习C语言宏的建议

标签 c macros

我已经学习了涵盖 C 语言的编程语言本科类(class)。然而,并不是说我已经开始在一家从事嵌入式系统的公司工作,我看到 C 语言中经常使用过多的宏。

请分享一些链接,我可以从中了解有关宏的更多信息。

我有 K&R 第二版,但我认为他们的风格太简洁了。有更多例子的东西对我来说会更好。

最佳答案

老实说,现在您应该将宏的使用限制在非常简单的定义中。

换句话说,不要浪费时间用宏来制作复杂的函数。

它们在过去往往具有三个主要用途:

  • 供预编译器使用的简单定义,例如 #define USE_DEBUG#ifdef USE_DEBUG。总的来说,这些在可移植代码中仍然非常有值(value)。

  • 快速“内联”函数,例如 #define SQR(x) ((x) * (x)) 现在更适合真正的内联函数。宏版本有很多问题,其中之一是 i = 7; j = SQR(i++); 不一定会做你期望的事情。

  • 预处理器枚举,如 #define OKAY 0#define ERR_NOMEM 1 等等 - 这些最好作为真实枚举来完成 - 因为宏版本是基本替换,您往往不会在调试信息中获取符号。

关于c - 学习C语言宏的建议,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5712521/

相关文章:

c - 为什么 -Winit-self 与 -Wuninitialized 分开

c - union 中的并行数组与严格别名有何关系?

javascript - 用 javascript 编写的 FD_SET 和 FD_ISSET 宏

functional-programming - Clojure 中的这个宏有什么问题?

c - 为什么我的 DEBUG_PRINT 宏没有在包含它的 c 文件中被调用

c - SDL "dropping"初始事件?

c++ - opencv背景减法得到颜色对象

clojure - Clojure 中的动态记录

c - 使用 C 向字符串添加一个点

macros - 为什么通过 `use some_crate::derive_foo` 导入自定义派生 Foo 不起作用?