Chinaunix首页 | 论坛 | 博客
  • 博客访问: 24031
  • 博文数量: 5
  • 博客积分: 20
  • 博客等级: 民兵
  • 技术积分: 60
  • 用 户 组: 普通用户
  • 注册时间: 2010-07-08 12:49
文章分类

全部博文(5)

文章存档

2019年(1)

2017年(3)

2014年(1)

我的朋友

分类: C/C++

2017-10-24 16:37:36

extern 在c语言中表示外部定义, 一般在头文件中函数声明默认带extern, 变量则必须显示声明extern属性, 否则在多个模块中包含同一个头文件, 在联结时会报重复定义错误;
现在来看另一种情况

  1. // test1.c
  2. #include <stdio.h>

  3. int a = 100;
  4. int b;

  5. void test1()
  6. {
  7.     b = 1000;
  8.     printf("test1: a = %d, b = %d\n", a, b);
  9. }

  10.  // test2.c
  11.  #include <stdio.h>
  12.   
  13. int a;
  14. int b;

  15. void test2()
  16. {
  17.  a = 200;
  18. b = 2000;
  19. printf("test2: a = %d, b = %d\n", a, b);
  20. }

  21. // main.c
  22. extern void test1();
  23. extern void test2();

  24. int main()
  25. {
  26. test1();
  27. test2();
  28. }

  
编译运行:
#gcc *.c
正常编译, 输出
test1: a = 100, b = 1000
test2: a = 200, b = 2000

此时编译器没有认为a, b重复定义, 避免这种情况的方式, 编译时添加参数 
-fno-common
#gcc -fno-common *.c

阅读(426) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~