| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 12879 人关注过本帖
标题:关于 for 循环里定义并初始化变量的问题。
只看楼主 加入收藏
wcg24xable
Rank: 2
等 级:论坛游民
帖 子:24
专家分:10
注 册:2014-9-17
结帖率:33.33%
收藏
已结贴  问题点数:20 回复次数:10 
关于 for 循环里定义并初始化变量的问题。
#include<stdio.h>
int main()
{
    int sum=0;
    for(int i=0;i<=100;++i)//定义并初始化变量i=0.实际编译器运行不起来。但把int i=0拿到for循环外部(如下黑体加粗部分)就可以。
    {
        sum+=i;
    }
    printf("%d",sum);

    return 0;
}

#include<stdio.h>
int main()
{
    int sum=0;
    int i=0;
    for(;i<=100;++i)

    {
        sum+=i;
    }
    printf("%d",sum);

    return 0;
}
不知道为什么,希望大师解答,初学C语言。
2014-09-24 18:29
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:10 
这是C++的语法,旧式C编译器不支持,但新式C99标准支持。如果你使用VC,不要用.c作文件扩展名,用.cpp,即启动C++编译器,否则它用C编译器,而VC是不支持C99标准的。要么你用支持C99的gcc编译器。

授人以渔,不授人以鱼。
2014-09-24 18:33
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
顺便说一句,当你用vc的时候,不需要启动C编译模式,C++完全兼容C语法,守那种古老又过时的规矩没用的,如果是好的东西,新标准就不用放弃它向人家学习,你反过去守,就是犯傻。新手也不能被人这样束缚了思维。

授人以渔,不授人以鱼。
2014-09-24 18:37
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:0 
微软的C编译器不支持C99 而这个特性是C99引入的 像楼上说的 不用微软的C编译器而采用C++编译器 自然就【解决】这个问题了
2014-09-24 18:44
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
用C++编译器编译C程序完全没有问题,其实根本不需要再提供C编译器,gcc也是与VC一样C/C++混一的。

授人以渔,不授人以鱼。
2014-09-24 18:50
wcg24xable
Rank: 2
等 级:论坛游民
帖 子:24
专家分:10
注 册:2014-9-17
收藏
得分:0 
回复 2 楼 TonyDeng
谢谢您,刚刚尝试您的步骤,程序正常运行。
那就是正常新建程序,只不过把文件名改为.cpp就Ok被。
顺便问一句,就是像这种for循环定义并初始化有什么好处和坏处?
2014-09-24 18:50
wcg24xable
Rank: 2
等 级:论坛游民
帖 子:24
专家分:10
注 册:2014-9-17
收藏
得分:0 
回复 4 楼 zklhp
那们都用什么编译器啊,我现在在用VisualC++6.0,这个是不是比较常用啊。
2014-09-24 18:53
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
当变量在块(一块花括号范围)内定义时,它的作用域就在这块内部,即局部变量,超出花括号外是不可访问的,这样的好处,是变量更紧凑,就在使用它的区域内定义和使用,不用往上翻几页找到定义点才知道有没有定义,这是为代码清晰性而引入的。

授人以渔,不授人以鱼。
2014-09-24 18:58
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
以下是引用wcg24xable在2014-9-24 18:53:19的发言:

那们都用什么编译器啊,我现在在用VisualC++6.0,这个是不是比较常用啊。

也是过时了,大陆学校常用而已。

授人以渔,不授人以鱼。
2014-09-24 18:59
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:10 
程序设计的一个原则,是资源尽量在需要的时候才申请(定义变量就是申请资源),用完马上释放资源(超出块外局部变量就被回收了),不要占着茅坑不拉屎(栈空间是有限的),这跟其他领域是一样的。当一个函数代码不长时,定义集中放在开头没什么,但长了的时候,就不方便了,尽管如此,虽然现实影响不大,但理论上又不是这样说,以紧凑原则使用资源,是好的理论与实践结合。

[ 本帖最后由 TonyDeng 于 2014-9-24 19:09 编辑 ]

授人以渔,不授人以鱼。
2014-09-24 19:08
快速回复:关于 for 循环里定义并初始化变量的问题。
数据加载中...
 
   



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

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