免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
123下一页
最近访问板块 发新帖
查看: 23284 | 回复: 25

[C] C语言中变量的定义要放在所有执行语句的最前面吗? [复制链接]

论坛徽章:
0
发表于 2011-03-25 08:46 |显示全部楼层
本帖最后由 hopetoseeyou 于 2011-03-28 13:06 编辑

我觉得是这样,昨天下午写了一个小程序,也验证了这个,详见博文:
http://blog.chinaunix.net/space. ... =blog&id=188107

但是,有人回复说,是我的编译器太老了,C标准没有这种说明,反而有一种编程风格,鼓励变量就近定义。

到底应该是什么呢?

PS:
谢谢大家的指点,又查了一些资料,现在明白了,博文已经修改了。
C89规定,在任何执行语句之前,在块的开头声明所有局部变量。
在C99以及C++中则没有这个限制,即在首次使用之前,可在块的任何位置都可以声明变量。

论坛徽章:
323
射手座
日期:2013-08-23 12:04:38射手座
日期:2013-08-23 16:18:12未羊
日期:2013-08-30 14:33:15水瓶座
日期:2013-09-02 16:44:31摩羯座
日期:2013-09-25 09:33:52双子座
日期:2013-09-26 12:21:10金牛座
日期:2013-10-14 09:08:49申猴
日期:2013-10-16 13:09:43子鼠
日期:2013-10-17 23:23:19射手座
日期:2013-10-18 13:00:27金牛座
日期:2013-10-18 15:47:57午马
日期:2013-10-18 21:43:38
发表于 2011-03-25 08:51 |显示全部楼层
似乎C89、C99的差别吧

论坛徽章:
0
发表于 2011-03-25 08:55 |显示全部楼层
函数开头一堆变量定义,确实代码看起来会很费解,不如使用时定义来得清晰

也就是老的C语言编译器会要求这样,C++以及新的Java等语言都更注重代码可读性。

不过话说回来,要达到最大的兼容跨平台性,还是放在函数开头定义吧。

论坛徽章:
12
巳蛇
日期:2013-09-16 15:32:242015年辞旧岁徽章
日期:2015-03-03 16:54:152015年亚洲杯之约旦
日期:2015-02-11 14:38:37双鱼座
日期:2015-01-05 11:05:47戌狗
日期:2014-12-08 09:41:18戌狗
日期:2014-08-15 09:29:29双子座
日期:2014-08-05 09:17:17卯兔
日期:2014-06-08 15:32:18巳蛇
日期:2014-01-27 08:47:08白羊座
日期:2013-11-28 21:04:15巨蟹座
日期:2013-11-13 21:58:012015年亚洲杯之科威特
日期:2015-04-17 16:51:51
发表于 2011-03-25 08:56 |显示全部楼层
C89也没这种规定吧,编译器太老+1

论坛徽章:
0
发表于 2011-03-25 08:58 |显示全部楼层
C99和C++不需要

论坛徽章:
0
发表于 2011-03-25 16:03 |显示全部楼层
随用随定义  这个不是标准的问题吧 目前没有发现那个编译器有这样的限制...

论坛徽章:
2
程序设计版块每日发帖之星
日期:2015-06-17 22:20:00每日论坛发贴之星
日期:2015-06-17 22:20:00
发表于 2011-03-25 19:31 |显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
1
射手座
日期:2013-08-21 13:11:46
发表于 2011-03-25 19:47 |显示全部楼层
之前移植一个C写的程序,碰到过这个问题....
其实还是写在前面清晰一点

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
发表于 2011-03-25 20:50 |显示全部楼层
可以折衷一下,
在花括号的开始处声明变量,我就是这样做的。

论坛徽章:
1
2015年迎新春徽章
日期:2015-03-04 09:49:03
发表于 2011-03-26 02:23 |显示全部楼层
可以折衷一下,
在花括号的开始处声明变量,我就是这样做的。
flw 发表于 2011-03-25 20:50
  1. #include <stdio.h>
  2. #include <stdlib.h>


  3. main()
  4. {   
  5.     FILE *fp;
  6.     fp = fopen("a.txt", "r");


  7.     if(fp == NULL)
  8.     {
  9.         printf("there is no a.txt\n");
  10.         exit(0);
  11.     }
  12.    
  13.     {
  14.         char c;
  15.         c = fgetc(fp);


  16.         while(c != EOF)
  17.         {
  18.             putchar(c);
  19.             c = fgetc(fp);
  20.         }
  21.     }


  22.     fclose(fp);


  23.     return 0;
  24. }
复制代码
{
        char c;
        c = fgetc(fp);


        while(c != EOF)
        {
            putchar(c);
            c = fgetc(fp);
        }
    }

是指这样吗?
谢谢
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP