打印

奇怪,这程序为什么输出为0呢?

[复制链接]
1294|11
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
csrbzhb|  楼主 | 2013-5-2 16:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
DMA, DM, IDMA, IO, ni
#include "stdio.h"
void main()
{
        extern char a[];
        int size;
        size=sizeof(a);
        printf("%d\r\n",size);
}
char a[]="ni hao a!! ";


这里不截图了,这程序的结果输出0;这是为什么呢?

相关帖子

沙发
442017031| | 2013-5-6 10:06 | 只看该作者
你上面这个在一个文件中?在同一个文件中加extern是重复定义,而且这样你的程序会编译通过不报错?我表示很奇怪

使用特权

评论回复
板凳
csrbzhb|  楼主 | 2013-5-6 10:59 | 只看该作者
442017031 发表于 2013-5-6 10:06
你上面这个在一个文件中?在同一个文件中加extern是重复定义,而且这样你的程序会编译通过不报错?我表示很 ...

是啊  编译器不报错的。。这里的话我感觉应该不算重复定义变量的。

使用特权

评论回复
地板
fengyun524| | 2013-5-6 11:35 | 只看该作者
extern char a[];
没见过这种用法

使用特权

评论回复
5
zzz316| | 2013-5-6 11:59 | 只看该作者
肯定为零啊,你都没有赋值给他,后面赋值的时候他的作用只在赋值后才起作用。

使用特权

评论回复
6
442017031| | 2013-5-6 14:57 | 只看该作者
csrbzhb 发表于 2013-5-6 10:59
是啊  编译器不报错的。。这里的话我感觉应该不算重复定义变量的。

我不知道你用的什么编译器,但是你extern这样用是错的,你加了extern就是让编译器在其他文件中寻找a[]的定义,但是其他文件中没有包含这个定义,所以可能编译器自己把它赋0了,而且extern不是预处理命令,所以不报错 我真的想不通。你使用之后再定义,可能是你的编译器比较高级吧,系统自己定义了,系统赋值为空数组。之后定义的不算

使用特权

评论回复
7
csrbzhb|  楼主 | 2013-5-7 15:26 | 只看该作者
442017031 发表于 2013-5-6 14:57
我不知道你用的什么编译器,但是你extern这样用是错的,你加了extern就是让编译器在其他文件中寻找a[]的 ...

我是用VC++6.0编译器的。

使用特权

评论回复
8
senioryzc| | 2013-5-7 16:20 | 只看该作者
sizeof运算符,根据 “extern char a[]”这个声明根本无法得到 a的大小
gcc会报错: error: invalid application of 'sizeof' to incomplete type 'char[]'
vc6呢 - 就是你的结果

使用特权

评论回复
9
清明节下雨天| | 2013-5-7 17:14 | 只看该作者
如果有什么困惑 可以登录以下网址 这里有专家为你解答
工控技术连载积极参与,赢50元电话充值卡!  1、跟靳老师学PKS;2、剑指AB PLC编程和组态;3,OPC网络通讯机制简析 ——打破高端技术普及的壁垒!  第二期自动化社区万元大奖奖励活动即将开幕!本期大奖得主将花落谁家?答案等您来揭晓!

使用特权

评论回复
10
442017031| | 2013-5-8 12:57 | 只看该作者
csrbzhb 发表于 2013-5-7 15:26
我是用VC++6.0编译器的。

我没有vc6 我用的vs2010,你这个说实话,真的会报错,你为什么要把定义放到最后,这不符合编程规范

使用特权

评论回复
11
csrbzhb|  楼主 | 2013-5-8 19:10 | 只看该作者
本帖最后由 csrbzhb 于 2013-5-8 19:24 编辑
442017031 发表于 2013-5-8 12:57
我没有vc6 我用的vs2010,你这个说实话,真的会报错,你为什么要把定义放到最后,这不符合编程规范 ...

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

11

主题

28

帖子

1

粉丝