鱼C论坛

 找回密码
 立即注册
查看: 5063|回复: 10

C89和C99关于变量声明的区别求助

[复制链接]
发表于 2013-9-11 09:57:56 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 懒家大少 于 2013-9-12 11:15 编辑
  1. #include <stdio.h>

  2. int main(void) {
  3.         long arrs[50];        // 声明一个存储50个long值的数组
  4.         int index = 49;        // 下标49,也就是第50个元素
  5.         arrs[index] = 123456;
  6.         
  7.         int x;
  8.         for(x = 0; x < 100; x++);
  9.         printf("x = %d\n", x);
  10. }
复制代码


刚才我用了C99标准的mingw5去编译以上代码,不会报错。但是我又用了C89标准的VC6.0去编译上面代码,会报错。

我想问的问题是,是上面的编译工具内部实现不一样导致的问题,还是C89和C99的标准导致的呢?
因为我不想被编译工具误导,所以这个很重要,请帮忙一下,谢谢。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-9-11 11:08:36 | 显示全部楼层
  1. #include <stdio.h>

  2. int main(void) {
  3.         long arrs[50];        // 声明一个存储50个long值的数组
  4.         int index = 49;
  5.         int x;       // 下标49,也就是第50个元素
  6.         arrs[index] = 123.456;
  7.        
  8.        
  9.         for(x = 0; x < 100; x++);
  10.         printf("x = %d\n", x);
  11. }
复制代码
所有变量的声明都必须放在最前面。。。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-9-11 11:10:59 | 显示全部楼层
我的VC6.0显示正常!~~~暂无找到错误。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-9-11 14:14:20 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-9-11 15:08:24 | 显示全部楼层
懒家大少 发表于 2013-9-11 14:14
额··我问的是标准问题

工具不是按标准来的么。。。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-9-11 16:39:00 | 显示全部楼层
“我想问的问题是,是上面的编译工具内部实现不一样导致的问题,还是C89和C99的标准导致的呢?”
两者都是
C89和C99的标准差异是源头上的原因,两编译工具因为是依据不同标准执行的编译处理,其内部实现当然也有不一样。
具体对你这段代码,两种标准有什么差异,你可以通过VC6的错误提示去了解。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-9-11 17:57:36 | 显示全部楼层
首先抛开各种标准,作为一个C程序,就的写成正常点的C,专业点的,把所有的变量声明放在函数的开始部分,声明完变量,再使用,不要弄的不C,不C++的!另外,整型数就用整型数初始化,用浮点数初始化整型数,没有好的习惯,以后程序写的多了,出现bug,悲剧自然就产生了!

ps: 在VC中的错误是变量没有全部在函数开始,集中初始化。 写C程序,你要站在可移植层的角度去写,C89,C99都是浮云,可移植性行的C才是王道!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-9-12 00:09:05 | 显示全部楼层
笨笨熊 发表于 2013-9-11 17:57
首先抛开各种标准,作为一个C程序,就的写成正常点的C,专业点的,把所有的变量声明放在函数的开始部分,声 ...

明白了,一切都按旧式C语言标准写,向下兼容。
额,我没有浮点数初始化整型数吧
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-9-12 08:47:08 | 显示全部楼层
懒家大少 发表于 2013-9-12 00:09
明白了,一切都按旧式C语言标准写,向下兼容。
额,我没有浮点数初始化整型数吧

long arrs[50];        // 声明一个存储50个long值的数组
arrs[index] = 123.456;

“123.456”是什么数?long是什么类型,数据类型还不过关,重头好好看基础吧!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-9-12 08:55:40 | 显示全部楼层
学习中,向各位前辈问好~~:titter:
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-9-12 11:15:12 | 显示全部楼层
笨笨熊 发表于 2013-9-12 08:47
long arrs[50];        // 声明一个存储50个long值的数组
arrs = 123.456;

这个是我错了。不解释,的确错。
我继续回笼。
谢谢提醒。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-11-6 07:36

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表