extern 在c语言中表示外部定义, 一般在头文件中函数声明默认带extern, 变量则必须显示声明extern属性, 否则在多个模块中包含同一个头文件, 在联结时会报重复定义错误;
现在来看另一种情况
-
// test1.c
-
#include <stdio.h>
-
-
int a = 100;
-
int b;
-
-
void test1()
-
{
-
b = 1000;
-
printf("test1: a = %d, b = %d\n", a, b);
-
}
-
-
// test2.c
-
#include <stdio.h>
-
-
int a;
-
int b;
-
-
void test2()
-
{
-
a = 200;
-
b = 2000;
-
printf("test2: a = %d, b = %d\n", a, b);
-
}
-
-
// main.c
-
extern void test1();
-
extern void test2();
-
-
int main()
-
{
-
test1();
-
test2();
-
}
编译运行:
#gcc *.c
正常编译, 输出
test1: a = 100, b = 1000
test2: a = 200, b = 2000
此时编译器没有认为a, b重复定义, 避免这种情况的方式, 编译时添加参数
-fno-common
#gcc -fno-common *.c
阅读(460) | 评论(0) | 转发(0) |