声明H文件中的extern var vs * *在C文件中定义它

时间:2018-02-21 19:28:02

标签: c extern

所以我一直在弄乱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编译的,如果相关的话。

0 个答案:

没有答案