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

问题描述

我在 C89 中有以下源代码:

例程_ac

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

和以下头文件:

例程_a.h

struct DataRoutineA {
  int a;
  int b;
};

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

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

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

标签: cheader-filesc89

解决方案


默认情况下,C 中的所有函数都是外部函数。所以没有区别

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

struct DataRoutineA routineA(int a, int b);

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


推荐阅读