免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: madope
打印 上一主题 下一主题

使用extern声明来引用static变量 编译报错 [复制链接]

论坛徽章:
2
程序设计版块每日发帖之星
日期:2015-06-17 22:20:00每日论坛发贴之星
日期:2015-06-17 22:20:00
11 [报告]
发表于 2012-04-23 18:58 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
12 [报告]
发表于 2012-04-23 19:14 |只看该作者
我也是这样理解啊 可是这个程序gcc编译会出错!!

static.c:7: 错误:对‘n’的静态声明出现在非静态声明之后
static.c:3: 错误:‘n’的上一个声明在此
回复 10# pmerofc


   

论坛徽章:
2
程序设计版块每日发帖之星
日期:2015-06-17 22:20:00每日论坛发贴之星
日期:2015-06-17 22:20:00
13 [报告]
发表于 2012-04-23 20:08 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
14 [报告]
发表于 2012-04-23 20:19 |只看该作者
编译器的问题吗 我的gcc会出错!!
回复 13# pmerofc


   

论坛徽章:
2
程序设计版块每日发帖之星
日期:2015-06-17 22:20:00每日论坛发贴之星
日期:2015-06-17 22:20:00
15 [报告]
发表于 2012-04-23 20:26 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
16 [报告]
发表于 2012-04-23 21:38 |只看该作者
楼主犯了C++编程思想第三章第6节举的经典反例。。。

论坛徽章:
0
17 [报告]
发表于 2012-04-24 00:08 |只看该作者
回复 5# sanbiangongzi


    觉得对于static还是分文件和函数两种作用域比较好
文件作用域的话static为变量提供了internal的链接属性
而如果在函数中的话貌似是none属性(也有写作no linkage的)
这样的情况下如果你再不同的函数中以相同的标识符声明
依然被认为是不同的变量

在文件作用域下如果两次声明了x的话按照storage class关键词来分析的话
应该是
internal linkage
static duration
static initializer
tentative definition <-----这个决定了第二次的声明并不会创建一个新的变量

论坛徽章:
0
18 [报告]
发表于 2012-04-24 00:10 |只看该作者
回复 12# madope

你说的到底是那个程序。。。
你开始有static和extern的那个?
   

论坛徽章:
0
19 [报告]
发表于 2012-04-24 01:05 |只看该作者
本帖最后由 x5miao 于 2012-04-24 01:06 编辑




    搞清链接域、标号作用域和对象生存周期三个概念的区别,一切疑问就都解决了。不需要再额外引入什么特别的概念

论坛徽章:
0
20 [报告]
发表于 2012-04-24 09:55 |只看该作者
本帖最后由 madope 于 2012-04-24 09:56 编辑
EAL__ 发表于 2012-04-24 00:10
回复 12# madope

你说的到底是那个程序。。。



就是pmerofc提供的
#include <stdio.h>

int main(  void )
{
  extern int n;
  printf("%d\n",n);
  return 0;
}

static int n=6;

会报错。。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP