假设有一个头文件:a.h 和源文件:a1.c a2.c ... an.c; n> = 1,这意味着它可能只有一个源文件,或者有几个源文件。
我的问题是如何在a.h中定义全局变量g;哪个应该是a1.c ... an.c.
有限制:
在a1.c a2.c ... an.c; “a.h”只能包含在第一行中,这意味着在#include“a.h”行之前源文件中不应有代码
g必须在a.h中定义。
只能通过以下方式编译代码:
gcc -c a1.c -o a1.o
...
gcc -c an.c -o an.o
gcc -o a.exe a1.o ... an.o
有一个答案在a.h中定义g,如下所示: extern int g; 但是,根据c的规范J.5.11;这是未定义的行为。
还有其他解决方案吗?
答案 0 :(得分:4)
正如你所说,变量必须在c文件中定义,声明应该位于头文件中 您必须在任何c文件中定义一个全局变量,并在头文件中声明'extern'。
例)
1) define global variable in a1.c
int g;
2) declare global variable in a.h
extern int g;
3) include header file in other c files
#include "a.h"
// to do something