我在头文件中找到了这个,我不确定这是做什么的。
为什么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);
答案 0 :(得分:2)
首先检查是否有定义的值。看起来这个值BCM2835_NO_DELAY_COMPATIBILITY
可以打开和关闭与特定计时器集的兼容性。如果没有定义(换句话说,如果它没有关闭)那么两个宏被定义为指向一个实际的函数。
稍后,定义了这些实际功能。
还有其他问题吗?
答案 1 :(得分:2)
#define
之后的语句实际上不是函数,而是预处理器宏。
宏的目的是在编译过程之前替换源代码中的文本。这意味着,在程序员在包含此标头的文件中键入delay(x)
的任何地方,它都将替换为bcm2835_delay(x)
。与delayMicroseconds(x)
和bcm2835_delayMicroseconds(x)
类似(仅当BCM2835_NO_DELAY_COMPATIBILITY
尚未定义时)。
你所说的后来的声明是实际的函数声明 - 事实上对于宏正在调用的函数。
在一个有点不相关的注释中,重要的是区分正在定义的函数和声明的函数(两者都不与#define
区分,因为它定义了一个宏 - 而不是一个函数!)
声明.h文件中的函数。实际上,extern
关键字指定它们将在此文件范围之外定义。
另一方面,函数定义将包含大括号{...}
,其内部定义了行为。
我希望这有帮助。