免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1672 | 回复: 7
打印 上一主题 下一主题

为什么gcc没有发现这个错误? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-08-14 15:04 |只看该作者 |倒序浏览
main()
{
    struct NONE_STRUCT *foo;//NONE_STRUCT 未在任何地方定义,自己乱写的

    printf("foo is %d\n", foo);
}
为什么NONE_STRUCT 未在任何地方定义, gcc却编译通过,而且运行正常,显示为foo is 1073828704之类的结果?

环境: RedHat 9.0(2.4.20-
gcc v3.2.2

论坛徽章:
0
2 [报告]
发表于 2006-08-14 18:16 |只看该作者
foo,只是个指针而已。

论坛徽章:
0
3 [报告]
发表于 2006-08-14 18:26 |只看该作者
那是个什么类型的指针呢?
类型中的错误为什么不报呢?

论坛徽章:
0
4 [报告]
发表于 2006-08-14 18:39 |只看该作者
原帖由 ld_jia 于 2006-8-14 15:04 发表
main()
{
    struct NONE_STRUCT *foo;//NONE_STRUCT 未在任何地方定义,自己乱写的

    printf("foo is %d\n", foo);
}
为什么NONE_STRUCT 未在任何地方定义, gcc却编译通过,而且运行正常,显示 ...

>>
>>
>>你要是使用-Wall参数编译,应该有警告信息,是关于printf("foo is %d\n", foo);中
>>foo类型的警告。在这里,foo是一个NONE_STRUCT 型的空结构指针。之所以是空结
>>构指针,是因为NONE_STRUCT 是未定义的,实际上就是定义了一个指针变量,但是
>>没有赋给任何值,所以是一个空指针,其值不确定。
>>
>>

论坛徽章:
0
5 [报告]
发表于 2006-08-14 21:09 |只看该作者

回复 4楼 Bayweb 的帖子

多谢Bayweb 指点!~

论坛徽章:
0
6 [报告]
发表于 2006-08-14 21:13 |只看该作者

回复 4楼 Bayweb 的帖子

不过,那个空结构指针到底是什么东西呢,它跟这样定义

int *foo1;
的指针有什么区别呢?这个foo1没有初始化,值也是不确定的啊!

论坛徽章:
0
7 [报告]
发表于 2006-08-14 21:53 |只看该作者
原帖由 ld_jia 于 2006-8-14 21:13 发表
不过,那个空结构指针到底是什么东西呢,它跟这样定义

int *foo1;
的指针有什么区别呢?这个foo1没有初始化,值也是不确定的啊!

>>
>>
>>这两者的区别是在内存中地存储方式不一样,前一个以结构体的形式进行存储,
>>后一个使用一般变量的存储方式。例如int就是一个变量元素,通常不可再进行
>>划分,程序读取的时候一般对整个int变量进行操作;但是对于结构体不是这样,
>>由于结构体含有自己的成员(你这里的定义为空,就是没有成员),所以结构体
>>在内存中还可以按照成员元素来进行进一步的划分并独立操作。
>>
>>下面简单的表示了一下变量和结构体在内存中的分布情况:
>>变量(通常为一个操作单元):
>>+------------+
>>|    1           |
>>+------------+
>>
>>结构体(通常为元素个数个操作单元):
>>+--------------------------------------------+
>>|     1         |     2      |     3   |   4...      |
>>+--------------------------------------------+
>>
>>其中每一个操作单元可以是各种类型的变量(int、char、point....)
>>
>>

论坛徽章:
0
8 [报告]
发表于 2006-08-14 21:57 |只看该作者
原帖由 Bayweb 于 2006-8-14 21:53 发表

>>
>>
>>这两者的区别是在内存中地存储方式不一样,前一个以结构体的形式进行存储,
>>后一个使用一般变量的存储方式。例如int就是一个变量元素,通常不可再进行
>>划分,程 ...

>>
>>
>>指向空结构体的指针,我个人认为说到底还是int型,因为指针本身就是int型,只不过是特殊的数,
>>其值指向内存中某一个地址,而且该地址代表一个struct结构,但是该结构为空。不知道这样说对
>>不对。
>>
>>
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP