我可以在 C Header 上使用 extern 函数声明,它也用于包含函数定义的 C 源文件吗?

Can I use extern function declaration on a C Header which is also used for the C source file which contains the function definition?

我在C89中有如下源代码:

routine_a.c:

struct DataRoutineA routineA(int a, int b) {
  struct DataRoutineA data = (struct DataRoutineA *) malloc(sizeof(DataRoutineA));
  data.a = a;
  data.b = b;
  return data;
}

和以下 header 文件:

routine_a.h:

struct DataRoutineA {
  int a;
  int b;
};

extern struct DataRoutineA routineA(int a, int b);

routine_a.h 的目的是它可以用作其他源代码文件的 header。因此定义了结构以及外部函数定义。在那种情况下,我的理解是 header 已正确定义。

但是,如果此 header 也用于 routine_a.c,extern 子句会发生什么情况?在 ANSI C/C89 中解决这个问题的方法是什么?这种情况下我需要两个不同的 header 吗?

默认情况下,C 中的所有函数都是 extern。所以

没有区别
extern struct DataRoutineA routineA(int a, int b);

struct DataRoutineA routineA(int a, int b);

在声明函数原型时,您确实需要 extern 关键字。