当前时区为 UTC + 8 小时



发表新帖 回复这个主题  [ 17 篇帖子 ]  前往页数 1, 2  下一页
作者 内容
1 楼 
 文章标题 : 如何让CodeBlocks支持C99
帖子发表于 : 2009-08-14 11:04 

注册: 2009-05-18 14:26
帖子: 10
送出感谢: 0 次
接收感谢: 0 次
安装好了codeblocks之后编写程序,其中有一个问题,for()语句中定义的变量不能重复使用。也就是for(int i=0;i<10;i++).......for(i=0;i<12;i++)这种情况在编译的时候会报错,看了一下说是不支持这种语法要我换成另一个ISO标准语法。上网查了一下,说是GCC在默认情况下不支持C99而是C94,C94不允许如上使用for语句。我看了解决方法是在调用gcc的时候加上 -std=C99 的开关,可是我是在IDE中写程序,并不是单独编译。请问各位,怎么在CodeBlocks里设置,让编译器支持C99呢?


页首
 用户资料  
 
2 楼 
 文章标题 : Re: 如何让CodeBlocks支持C99
帖子发表于 : 2009-08-14 16:37 
头像

注册: 2009-07-07 19:52
帖子: 240
送出感谢: 0 次
接收感谢: 0 次
从编程角度来讲,不推荐这样做。因为这样不仅你在编写时要小心对待变量的作用域,在别人读你程序时,也会很头疼。

要是在公司里用这种方法写程序,会被骂的。

建议你最好别这样写程序。


_________________
阿呆 : 天下第一呆!


页首
 用户资料  
 
3 楼 
 文章标题 : Re: 如何让CodeBlocks支持C99
帖子发表于 : 2009-08-14 16:48 
头像

注册: 2006-07-02 11:16
帖子: 12522
地址: 廣州
送出感谢: 0 次
接收感谢: 8
楼上的搞错了吧, 在 C99 之前 for (int i = ... 的确是不合法的..


_________________
^_^ ~~~
要理解递归,首先要理解递归。

地球人都知道,理论上,理论跟实际是没有差别的,但实际上,理论跟实际的差别是相当大滴。


页首
 用户资料  
 
4 楼 
 文章标题 : Re: 如何让CodeBlocks支持C99
帖子发表于 : 2009-08-14 16:49 
头像

注册: 2009-07-07 19:52
帖子: 240
送出感谢: 0 次
接收感谢: 0 次
BigSnake.NET 写道:
楼上的搞错了吧, 在 C99 之前 for (int i = ... 的确是不合法的..


晕,我没说它是合法的啊。我只是不建议 LZ 这么做而已。


_________________
阿呆 : 天下第一呆!


页首
 用户资料  
 
5 楼 
 文章标题 : Re: 如何让CodeBlocks支持C99
帖子发表于 : 2009-08-14 16:57 
头像

注册: 2006-07-02 11:16
帖子: 12522
地址: 廣州
送出感谢: 0 次
接收感谢: 8
linjiework 写道:
BigSnake.NET 写道:
楼上的搞错了吧, 在 C99 之前 for (int i = ... 的确是不合法的..


晕,我没说它是合法的啊。我只是不建议 LZ 这么做而已。


我的意思是
如果你没有 C99 编译器可用
你就不得不这样做 ...


_________________
^_^ ~~~
要理解递归,首先要理解递归。

地球人都知道,理论上,理论跟实际是没有差别的,但实际上,理论跟实际的差别是相当大滴。


页首
 用户资料  
 
6 楼 
 文章标题 : Re: 如何让CodeBlocks支持C99
帖子发表于 : 2009-08-14 17:06 
头像

注册: 2009-07-07 19:52
帖子: 240
送出感谢: 0 次
接收感谢: 0 次
BigSnake.NET 写道:
linjiework 写道:
BigSnake.NET 写道:
楼上的搞错了吧, 在 C99 之前 for (int i = ... 的确是不合法的..


晕,我没说它是合法的啊。我只是不建议 LZ 这么做而已。


我的意思是
如果你没有 C99 编译器可用
你就不得不这样做 ...



:em20 咱们俩中间肯定有一个人把问题理解错了。


_________________
阿呆 : 天下第一呆!


页首
 用户资料  
 
7 楼 
 文章标题 : Re: 如何让CodeBlocks支持C99
帖子发表于 : 2009-08-14 17:09 
头像

注册: 2006-07-02 11:16
帖子: 12522
地址: 廣州
送出感谢: 0 次
接收感谢: 8
linjiework 写道:
BigSnake.NET 写道:
linjiework 写道:
BigSnake.NET 写道:
楼上的搞错了吧, 在 C99 之前 for (int i = ... 的确是不合法的..


晕,我没说它是合法的啊。我只是不建议 LZ 这么做而已。


我的意思是
如果你没有 C99 编译器可用
你就不得不这样做 ...



:em20 咱们俩中间肯定有一个人把问题理解错了。


是这回事的

for(int i=0;i<10;i++).......for(i=0;i<12;i++)

如果你用非 C99 模式编译, 会报错, 原因见上
如果你用 C99 模式编译, 还是会报错, 因为第二个 for 在第一个 for 里面的 i 的作用域之外

那么这种脑残语法谁支持呢?
VC6 .......
这究竟是一个 C 编译器还是 C++ 编译器呢
我也说不清 ....


_________________
^_^ ~~~
要理解递归,首先要理解递归。

地球人都知道,理论上,理论跟实际是没有差别的,但实际上,理论跟实际的差别是相当大滴。


页首
 用户资料  
 
8 楼 
 文章标题 : Re: 如何让CodeBlocks支持C99
帖子发表于 : 2009-08-14 17:24 
头像

注册: 2009-07-07 19:52
帖子: 240
送出感谢: 0 次
接收感谢: 0 次
呵呵,我的意思是不管它是否合法,都不推荐这样写,很容易出错的,而且会给别人阅读代码造成困难。
:em09


_________________
阿呆 : 天下第一呆!


页首
 用户资料  
 
9 楼 
 文章标题 : Re: 如何让CodeBlocks支持C99
帖子发表于 : 2009-08-14 17:39 
头像

注册: 2009-07-07 19:52
帖子: 240
送出感谢: 0 次
接收感谢: 0 次
刚才我测试了一下,这个形式 C99 模式是支持的,而且我也觉得它应该支持才对啊。

因为你在 for() 里面的变量定义,在 for 循环体内都是可见的。也就是说 for (int i=0;i<10;i++){ i--; } 这个语句是没有语法错误的(不知道你是否同意我这个观点)

既然在循环体内可见,那么在 for 循环体里的 for 循环里也应该是可见的啊!比如
for (int i=0;i<10;i++){
for (int k=0;k<10;k++){
i--;
}
}

这样语法应该也没错吧。那我把 k 替换成 i 也应该是没错的吧。所以我觉得这个从语法上没有错,而且我写的测试程序也验证了我的想法。

我的测试程序如下:

for (int i=0; i<5; i++) {
printf("1%d\n", i);
for (i=0; i<5; i++) {
printf("2%d\n", i);
}
}


_________________
阿呆 : 天下第一呆!


页首
 用户资料  
 
10 楼 
 文章标题 : Re: 如何让CodeBlocks支持C99
帖子发表于 : 2009-08-14 17:40 
头像

注册: 2007-12-16 0:45
帖子: 275
送出感谢: 0 次
接收感谢: 0 次
脑残语法 :em20 哈哈,同感 :em05 :em05 :em05


页首
 用户资料  
 
11 楼 
 文章标题 : Re: 如何让CodeBlocks支持C99
帖子发表于 : 2009-08-14 17:44 
头像

注册: 2007-12-16 0:45
帖子: 275
送出感谢: 0 次
接收感谢: 0 次
LZ,它再是IDE一样会提供自定义选项(IDE难道不编译了吗 :em25 )……我这里没有C::B,你自己好好找找 :em11


页首
 用户资料  
 
12 楼 
 文章标题 : Re: 如何让CodeBlocks支持C99
帖子发表于 : 2009-08-14 18:07 
头像

注册: 2006-07-02 11:16
帖子: 12522
地址: 廣州
送出感谢: 0 次
接收感谢: 8
linjiework 写道:
刚才我测试了一下,这个形式 C99 模式是支持的,而且我也觉得它应该支持才对啊。

因为你在 for() 里面的变量定义,在 for 循环体内都是可见的。也就是说 for (int i=0;i<10;i++){ i--; } 这个语句是没有语法错误的(不知道你是否同意我这个观点)

既然在循环体内可见,那么在 for 循环体里的 for 循环里也应该是可见的啊!比如
for (int i=0;i<10;i++){
for (int k=0;k<10;k++){
i--;
}
}

这样语法应该也没错吧。那我把 k 替换成 i 也应该是没错的吧。所以我觉得这个从语法上没有错,而且我写的测试程序也验证了我的想法。

我的测试程序如下:

for (int i=0; i<5; i++) {
printf("1%d\n", i);
for (i=0; i<5; i++) {
printf("2%d\n", i);
}
}


人家不是这个意思啦, 两个 for 是同一级..


_________________
^_^ ~~~
要理解递归,首先要理解递归。

地球人都知道,理论上,理论跟实际是没有差别的,但实际上,理论跟实际的差别是相当大滴。


页首
 用户资料  
 
13 楼 
 文章标题 : Re: 如何让CodeBlocks支持C99
帖子发表于 : 2009-08-14 18:13 

注册: 2009-05-18 14:26
帖子: 10
送出感谢: 0 次
接收感谢: 0 次
感谢各位,上面我说的可能有点不太明白,那2个for并不是嵌套的。我的本意是要用2个不相关的for循环,正常的写法就是
for(int i=0;i<10,i++){}......for(int i=0,i<12,i++){}.....但是在VC++6.0里for循环头里定义的变量是全局可见的,也就是说上面的写法在VC++6.0里是会报错的,因为第一个for里的 int i 对于 第2个for是可见的,这样就是重复定义了。所以我就写成了
for(int i=0;i<10,i++){}......for(i=0,i<12,i++){}....其实,这种情况也存在变量 i 的作用域问题。C94标准中for循环头里不可以定义变量,也说是说
for(int i=0;i<10,i++)这个就不能通过编译,必须要把变量 i 的定义提前出来 int i ;for(int i=0;i<10,i++),这么做同样存在关于 i 的作用域问题。所以我才想怎么能让codeblocks支持C99,在C99里for头中可以定义变量,且只在for循环中可见,这样就不用担心作用域的问题了。
LS的,C::B里的编译选项我看过了,只有一个让你选择编译器的地方。


页首
 用户资料  
 
14 楼 
 文章标题 : Re: 如何让CodeBlocks支持C99
帖子发表于 : 2009-08-14 18:17 
头像

注册: 2006-07-02 11:16
帖子: 12522
地址: 廣州
送出感谢: 0 次
接收感谢: 8
lonelyma1021 写道:
感谢各位,上面我说的可能有点不太明白,那2个for并不是嵌套的。我的本意是要用2个不相关的for循环,正常的写法就是
for(int i=0;i<10,i++){}......for(int i=0,i<12,i++){}.....但是在VC++6.0里for循环头里定义的变量是全局可见的,也就是说上面的写法在VC++6.0里是会报错的,因为第一个for里的 int i 对于 第2个for是可见的,这样就是重复定义了。所以我就写成了
for(int i=0;i<10,i++){}......for(i=0,i<12,i++){}....其实,这种情况也存在变量 i 的作用域问题。C94标准中for循环头里不可以定义变量,也说是说
for(int i=0;i<10,i++)这个就不能通过编译,必须要把变量 i 的定义提前出来 int i ;for(int i=0;i<10,i++),这么做同样存在关于 i 的作用域问题。所以我才想怎么能让codeblocks支持C99,在C99里for头中可以定义变量,且只在for循环中可见,这样就不用担心作用域的问题了。
LS的,C::B里的编译选项我看过了,只有一个让你选择编译器的地方。


应该有加选项的地方的

真的不行就写个 wrapper 算了

#!/bin/sh
exec gcc -std=c99 "$@"


_________________
^_^ ~~~
要理解递归,首先要理解递归。

地球人都知道,理论上,理论跟实际是没有差别的,但实际上,理论跟实际的差别是相当大滴。


页首
 用户资料  
 
15 楼 
 文章标题 : Re: 如何让CodeBlocks支持C99
帖子发表于 : 2009-08-14 18:40 

注册: 2009-05-18 14:26
帖子: 10
送出感谢: 0 次
接收感谢: 0 次
感谢各位,问题已经解决了。我在C::B的网站找到了解决的方法 http://forums.codeblocks.org/index.php? ... pic=7137.0
看来有这个问题的也不只我一个啊。呵呵,再次感谢大家 。。。


页首
 用户资料  
 
显示帖子 :  排序  
发表新帖 回复这个主题  [ 17 篇帖子 ]  前往页数 1, 2  下一页

当前时区为 UTC + 8 小时


在线用户

正在浏览此版面的用户:没有注册用户 和 3 位游客


不能 在这个版面发表主题
不能 在这个版面回复主题
不能 在这个版面编辑帖子
不能 在这个版面删除帖子
不能 在这个版面提交附件

前往 :  
本站点为公益性站点,用于推广开源自由软件,由 DiaHosting VPSBudgetVM VPS 提供服务。
我们认为:软件应可免费取得,软件工具在各种语言环境下皆可使用,且不会有任何功能上的差异;
人们应有定制和修改软件的自由,且方式不受限制,只要他们自认为合适。

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
简体中文语系由 王笑宇 翻译