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

[复制链接]
 楼主| 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[];
没见过这种用法
zzz316 发表于 2013-5-6 11:59 | 显示全部楼层
肯定为零啊,你都没有赋值给他,后面赋值的时候他的作用只在赋值后才起作用。
442017031 发表于 2013-5-6 14:57 | 显示全部楼层
csrbzhb 发表于 2013-5-6 10:59
是啊  编译器不报错的。。这里的话我感觉应该不算重复定义变量的。

我不知道你用的什么编译器,但是你extern这样用是错的,你加了extern就是让编译器在其他文件中寻找a[]的定义,但是其他文件中没有包含这个定义,所以可能编译器自己把它赋0了,而且extern不是预处理命令,所以不报错 我真的想不通。你使用之后再定义,可能是你的编译器比较高级吧,系统自己定义了,系统赋值为空数组。之后定义的不算
 楼主| csrbzhb 发表于 2013-5-7 15:26 | 显示全部楼层
442017031 发表于 2013-5-6 14:57
我不知道你用的什么编译器,但是你extern这样用是错的,你加了extern就是让编译器在其他文件中寻找a[]的 ...

我是用VC++6.0编译器的。
senioryzc 发表于 2013-5-7 16:20 | 显示全部楼层
sizeof运算符,根据 “extern char a[]”这个声明根本无法得到 a的大小
gcc会报错: error: invalid application of 'sizeof' to incomplete type 'char[]'
vc6呢 - 就是你的结果
清明节下雨天 发表于 2013-5-7 17:14 | 显示全部楼层
如果有什么困惑 可以登录以下网址 这里有专家为你解答
工控技术连载积极参与,赢50元电话充值卡!  1、跟靳老师学PKS;2、剑指AB PLC编程和组态;3,OPC网络通讯机制简析 ——打破高端技术普及的壁垒!  第二期自动化社区万元大奖奖励活动即将开幕!本期大奖得主将花落谁家?答案等您来揭晓!
442017031 发表于 2013-5-8 12:57 | 显示全部楼层
csrbzhb 发表于 2013-5-7 15:26
我是用VC++6.0编译器的。

我没有vc6 我用的vs2010,你这个说实话,真的会报错,你为什么要把定义放到最后,这不符合编程规范
 楼主| csrbzhb 发表于 2013-5-8 19:10 | 显示全部楼层
本帖最后由 csrbzhb 于 2013-5-8 19:24 编辑
442017031 发表于 2013-5-8 12:57
我没有vc6 我用的vs2010,你这个说实话,真的会报错,你为什么要把定义放到最后,这不符合编程规范 ...

您需要登录后才可以回帖 登录 | 注册

本版积分规则

11

主题

28

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部