如何在C头文件中定义函数
how to define functions in 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);
这是首先检查是否有定义的值。这个值 BCM2835_NO_DELAY_COMPATIBILITY
似乎可以打开和关闭与一组特定计时器的兼容性。如果它没有被定义(换句话说,如果它没有被关闭)那么两个 宏 被定义为指向一个实际的函数。
稍后定义那些实际的函数。
还有其他问题吗??
#define
后面的语句实际上不是函数,而是pre-processor宏。
宏的用途是在编译过程之前替换源代码中的文本。这意味着,程序员在包含此 header 的文件中的任何地方键入 delay(x)
,它将被替换为 bcm2835_delay(x)
。与 delayMicroseconds(x)
和 bcm2835_delayMicroseconds(x)
类似(当然,前提是 BCM2835_NO_DELAY_COMPATIBILITY
尚未定义)。
你所说的后面的声明是实际的函数声明——实际上是宏调用的函数。
有点 un-related 注意,区分定义的函数和声明的函数很重要(两者都与 #define
无关,因为它定义了一个宏- - 不是函数!)
.h文件中的函数已声明。事实上,extern
关键字指定它们将在该文件的范围之外定义。
另一方面,函数定义将包含大括号 {...}
,其中定义了行为。
希望对您有所帮助。
我在头文件中找到了它,但我不确定它的作用。
为什么有一个 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);
这是首先检查是否有定义的值。这个值 BCM2835_NO_DELAY_COMPATIBILITY
似乎可以打开和关闭与一组特定计时器的兼容性。如果它没有被定义(换句话说,如果它没有被关闭)那么两个 宏 被定义为指向一个实际的函数。
稍后定义那些实际的函数。
还有其他问题吗??
#define
后面的语句实际上不是函数,而是pre-processor宏。
宏的用途是在编译过程之前替换源代码中的文本。这意味着,程序员在包含此 header 的文件中的任何地方键入 delay(x)
,它将被替换为 bcm2835_delay(x)
。与 delayMicroseconds(x)
和 bcm2835_delayMicroseconds(x)
类似(当然,前提是 BCM2835_NO_DELAY_COMPATIBILITY
尚未定义)。
你所说的后面的声明是实际的函数声明——实际上是宏调用的函数。
有点 un-related 注意,区分定义的函数和声明的函数很重要(两者都与 #define
无关,因为它定义了一个宏- - 不是函数!)
.h文件中的函数已声明。事实上,extern
关键字指定它们将在该文件的范围之外定义。
另一方面,函数定义将包含大括号 {...}
,其中定义了行为。
希望对您有所帮助。