在多个C文件中使用extern变量

时间:2014-12-04 15:33:03

标签: c linux gcc extern

您好StackOverflow向导:

我有以下三个简单的C文件:

// File 1
#include "mainPgm.h"
void file1() {
  printf("N1 is now %d.\n", n1);                    
}

// File 2
#include "mainPgm.h"
void file2() {
  printf("N2 is now %d.\n", n2);                    
}

// File 3
#include "mainPgm.h"
void file3() {
  printf("N3 is now %d.\n", n3);                    
}

当然还有一个主程序:

#include <stdio.h>
#include <stdlib.h>
#include "mainPgm.h"

int main() {
  int n1 = 65536,
      n2 = 256,
      n3 = 16;

  file1();
  file2();
  file3();
}

最后,一个头文件:

#include<stdio.h>
void file1(), file2(), file3();
extern int n1, n2, n3;

所有这些都是使用简单的gcc命令编译的:

gcc -std=gnu99 -O2 -o jj -Wunused file1.c file2.c file3.c mainPgm.c

这会导致以下错误:

mainPgm.c: In function ‘main’:
mainPgm.c:8:7: warning: unused variable ‘n3’ [-Wunused-variable]
mainPgm.c:7:7: warning: unused variable ‘n2’ [-Wunused-variable]
mainPgm.c:6:7: warning: unused variable ‘n1’ [-Wunused-variable]
/tmp/ccVQjFHY.o: In function `file1':
file1.c:(.text+0x2): undefined reference to `n1'
/tmp/ccZqyI0n.o: In function `file2':
file2.c:(.text+0x2): undefined reference to `n2'
/tmp/ccbpJOpN.o: In function `file3':
file3.c:(.text+0x2): undefined reference to `n3'
collect2: error: ld returned 1 exit status

思想在mainPgm.h中定义n1,n2和n3将用于声明变量,它们在mainPgm.c中的定义将定义它们。不是这样!我哪里出错了?

TIA!

2 个答案:

答案 0 :(得分:3)

所有变量都是main()内的局部变量,它们永远不会从该函数外部可见。

将它们移出,以便它们全球化:

  int n1 = 65536,
      n2 = 256,
      n3 = 16;

int main() {
  file1();
  file2();
  file3();

  return EXIT_SUCCESS;
}

答案 1 :(得分:2)

您在main()函数中定义了堆栈中的变量。

您可以在同一个文件中定义它们但在主函数之外。

或者,常见的习惯是使用预处理器将变量声明为除了头文件的一个实例之外的所有变量。