免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
论坛 程序设计 C/C++ C extern
最近访问板块 发新帖
查看: 2040 | 回复: 9

[C] C extern [复制链接]

论坛徽章:
0
发表于 2012-12-24 14:01 来自手机 |显示全部楼层
include <stdio.h>

void main(void)
{
    extern int a;
}

static int a;

为什么编译报错?

论坛徽章:
0
发表于 2012-12-24 14:11 来自手机 |显示全部楼层
就算问题比较简单,也请各位高手帮忙解答一下!先谢了!

论坛徽章:
14
巨蟹座
日期:2013-11-19 14:09:4615-16赛季CBA联赛之青岛
日期:2016-07-05 12:36:0515-16赛季CBA联赛之广东
日期:2016-06-29 11:45:542015亚冠之全北现代
日期:2015-07-22 08:09:472015年辞旧岁徽章
日期:2015-03-03 16:54:15巨蟹座
日期:2014-12-29 08:22:29射手座
日期:2014-12-05 08:20:39狮子座
日期:2014-11-05 12:33:52寅虎
日期:2014-08-13 09:01:31巳蛇
日期:2014-06-16 16:29:52技术图书徽章
日期:2014-04-15 08:44:01天蝎座
日期:2014-03-11 13:06:45
发表于 2012-12-24 14:36 |显示全部楼层
extern 和 static 是相反的

static 表示不暴露符号信息,而 extern 表示从暴露的符号信息中……
我也不知道该怎么描述

论坛徽章:
14
巨蟹座
日期:2013-11-19 14:09:4615-16赛季CBA联赛之青岛
日期:2016-07-05 12:36:0515-16赛季CBA联赛之广东
日期:2016-06-29 11:45:542015亚冠之全北现代
日期:2015-07-22 08:09:472015年辞旧岁徽章
日期:2015-03-03 16:54:15巨蟹座
日期:2014-12-29 08:22:29射手座
日期:2014-12-05 08:20:39狮子座
日期:2014-11-05 12:33:52寅虎
日期:2014-08-13 09:01:31巳蛇
日期:2014-06-16 16:29:52技术图书徽章
日期:2014-04-15 08:44:01天蝎座
日期:2014-03-11 13:06:45
发表于 2012-12-24 14:38 |显示全部楼层
extern int a; 表示链接一个名叫a的int目标
而 static int a; 表示这个名叫a的符号不出现于连接时

论坛徽章:
1
摩羯座
日期:2013-12-19 10:04:07
发表于 2012-12-24 15:06 |显示全部楼层
我这边编译没错

论坛徽章:
0
发表于 2012-12-24 16:56 |显示全部楼层
把extern int a;放在main外面可以么?

论坛徽章:
59
2015年亚洲杯之约旦
日期:2015-01-27 21:27:392015年亚洲杯之日本
日期:2015-02-06 22:09:41拜羊年徽章
日期:2015-03-03 16:15:432015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015元宵节徽章
日期:2015-03-06 15:50:392015年亚洲杯之阿联酋
日期:2015-03-19 17:39:302015年亚洲杯之中国
日期:2015-03-23 18:52:23巳蛇
日期:2014-12-14 22:44:03双子座
日期:2014-12-10 21:39:16处女座
日期:2014-12-02 08:03:17天蝎座
日期:2014-07-21 19:08:47
发表于 2012-12-24 17:21 |显示全部楼层
  1. static int a;
复制代码
表示要分配一个只能在本地文件中看到的变量。
  1. extern int a;
复制代码
表明要引用一个全局可见的外部变量。

现在,你要哪个?
如果只要一个main中使用的全局变量。请直接用:
  1. void main(void){
  2.     static int a;
  3. }
复制代码

论坛徽章:
1
丑牛
日期:2013-09-29 19:04:50
发表于 2012-12-24 19:15 |显示全部楼层
把static int a;放在main函数前面就没错了

论坛徽章:
0
发表于 2012-12-25 08:22 来自手机 |显示全部楼层
我只是想站在语法院的角度分析一下这样写为什么错了?

论坛徽章:
0
发表于 2012-12-25 09:28 |显示全部楼层
错了吧。用的什么编译器?
error: static declaration of 'a' follows non-static declaration
note: previous declaration of 'a' was here
如果把static int a;放到main之前,那可以是对的。
语法上本来就没问题。
语义上的问题在于extern的含义。关键是,extern不直接保证外部链接。当存在可见的之前的相同标识符的声明时,extern指定该声明保持另外的声明指定的链接不变。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP