如何在C头文件中定义函数

时间:2015-07-23 00:24:33

标签: c header-files

我在头文件中找到了这个,我不确定这是做什么的。 为什么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);

2 个答案:

答案 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关键字指定它们将在此文件范围之外定义。

另一方面,函数定义将包含大括号{...},其内部定义了行为。

我希望这有帮助。