标题:Linux GCC 对数组到底是怎么处理的?
只看楼主
flyxkj
Rank: 2
等 级:论坛游民
帖 子:15
专家分:66
注 册:2012-1-31
得分:10 
回复 9楼 q332010372
VS有个模拟运行的功能,可以看到越界的错误!Linux还不是有看越界的工具valgrind(很强大,内存泄露和读写越界都可以检测!)
2012-04-16 21:01
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
得分:10 
以下是引用q332010372在2012-4-16 20:49:26的发言:

编译器是不会在编译期间检查,但是在发生越界的时候,应该要报错才对。这段代码在 windows vs 10.0 里面是会出错的,但在linux gcc 里面并不会出错

那是运行时系统报错,不是编译时编译器报错。如果编译开关设置了Debug模式,那么编译器会注入调试代码,在出错时启动调试器,如果设置了Release,就不会有调试代码,而靠操作系统处理。看来你没有学过C程序运行的原理,以为是编译器在运行程序。

授人以渔,不授人以鱼。
2012-04-16 21:03
q332010372
Rank: 2
等 级:论坛游民
帖 子:52
专家分:61
注 册:2010-7-27
得分:0 
回复 12楼 TonyDeng
嗯,我只知道,一个C源程序,需要经过 预处理、前端语法和语义分析、后端代码生成、优化、转化为汇编程序、链接载入内存,然后CPU根据CS段,读取指令,执行指令。
windows 用多了,总喜欢用 windows 的习惯来要求 linux, debug 用多了,感觉什么都自带 debug
2012-04-16 21:18
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
得分:0 
Windows Console程序的执行本质上跟Linux之类是一样的。

授人以渔,不授人以鱼。
2012-04-16 21:26
q332010372
Rank: 2
等 级:论坛游民
帖 子:52
专家分:61
注 册:2010-7-27
得分:0 
回复 14楼 TonyDeng
最近在补汇编,你那有好点的 AT&T 风格的资料吗?初级的
布鲁姆那本特想买,只是已经没得买了,除非去订,不过那价格好贵,网上的PDF太不清晰了,感觉看多了近视又得加深几十度...
2012-04-16 21:33
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
得分:0 
我没有。

授人以渔,不授人以鱼。
2012-04-16 21:35
q332010372
Rank: 2
等 级:论坛游民
帖 子:52
专家分:61
注 册:2010-7-27
得分:0 
回复 16楼 TonyDeng
当我没问
2012-04-16 21:40



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-365877-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.468740 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved