作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在头文件中找到了这个,但我不确定它的作用。为什么会有define
后面跟着 2 个函数?
#ifndef BCM2835_NO_DELAY_COMPATIBILITY
#define delay(x) bcm2835_delay(x)
#define delayMicroseconds(x) bcm2835_delayMicroseconds(x)
#endif
稍后在文件中我再次看到这两个函数为:
extern void bcm2835_delay (unsigned int millis);
extern void bcm2835_delayMicroseconds (uint64_t micros);
最佳答案
#define
之后的语句实际上不是函数,而是预处理器宏。
宏的目的是在编译过程之前替换源代码中的文本。意思是,程序员在任何地方输入 delay(x)
在包含此 header 的文件中,它将被替换为 bcm2835_delay(x)
。与 delayMicroseconds(x)
类似和bcm2835_delayMicroseconds(x)
(当然,只有 BCM2835_NO_DELAY_COMPATIBILITY
尚未定义)。
您所说的后面的声明是实际的函数声明——实际上是针对宏正在调用的函数。
在一些不相关的注释中,重要的是区分正在定义的函数和正在声明的函数(两者都与 #define
无关,因为它定义了宏 - 而不是函数!)
.h 文件中的函数已声明。事实上,extern
关键字指定它们将在此文件范围之外定义。
另一方面,函数定义将包含大括号 {...}
具有内部定义的行为。
我希望这有帮助。
关于c - 如何在C头文件中定义函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31576190/
我是一名优秀的程序员,十分优秀!