函数在C头文件中声明两次

时间:2016-11-09 13:39:52

标签: c function header extern

我知道带有#ifdef的C头文件的声明以及变量和函数之前的extern的含义。但最近我有一个嵌入式设备的第三方库,具有以下方案:

/* "lib.h" */
#ifndef LIB_H_
#define LIB_H_

   #ifdef LIB_C

      void function1();
      /* ... */

   #else

      extern void function1();
      /* ... */

   #endif

#endif /* LIB_H_ */

另外我有一个相应的C源文件:

/* lib.c */
#define LIB_C
#include "lib.h"

void function1()
   {
   /* ... */
   }

/* ... */

所以我在这里有点困惑。以这种方式在标题中声明所有函数两次的原因是什么?

1 个答案:

答案 0 :(得分:4)

对于某些不符合要求或古老的编译器而言,它是一种矫揉造作或兼容性攻击。您不需要extern版本,但使用它也没关系,因为默认情况下函数声明是extern。

换句话说,它是残酷的,但也许有人需要那种残酷。我们无法确定。