所以我一直在弄乱extern
关键字,以便更好地了解它的作用。
我有以下文件:
one.h
#ifndef ONE_H
#define ONE_H
extern unsigned global_var;
#endif
one.c
#include "one.h"
unsigned global_var = 10;
two.h
#ifndef TWO_H
#define TWO_H
void print();
#endif
two.c
#include "one.h"
#include "two.h"
#include <stdio.h>
void print() {
frprintf(stdout, "%u\n", global_var);
}
的main.c
#include "two.h"
int main() {
print();
return 0;
}
编译好并输出:10。正如所料。
现在,如果我改变
one.h
#ifndef ONE_H
#define ONE_H
// extern unsigned global_var;
#endif
基本上是空的,
two.c
#include "one.h"
#include "two.h"
#include <stdio.h>
void print() {
extern unsigned global_var;
frprintf(stdout, "%u\n", global_var);
}
行为完全一样。也就是说,我的程序仍然在没有警告和输出的情况下编译:10。
所以,我的问题是:以某种方式设置全局变量的不同之处究竟是什么?一种方法是正确的而另一种方式不是吗?
谢谢,
PS。这是使用gcc -Wall
编译的,如果相关的话。