我可以在 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
关键字。
我在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
关键字。