c中变量定义的位置问题

hichi2000 2008-09-28 02:38:18
#include <stdio.h>

int main(){

printf("hello\n");


int i =2;
printf("i=%d\n",i);

return 0;


}

以前好像有一条规则是c中的变量声明不能放在任何可执行语句之后,
上面的代码这样写用 gcc -ansi编译却没有错,用VC编译则会报错,难道说在ansi c中不包含这条规则吗?
...全文
390 28 打赏 收藏 转发到动态 举报
写回复
用AI写文章
28 条回复
切换为时间正序
请发表友善的回复…
发表回复
likefermat 2008-09-29
  • 打赏
  • 举报
回复
建立.cpp文件
不要建立.c文件,
代码可以一样。
ForestDB 2008-09-29
  • 打赏
  • 举报
回复
这方面VC6.0是老了点。
野男孩 2008-09-29
  • 打赏
  • 举报
回复
vc6没问题的都是建立的cpp的文件。

vc6前面已经说过了,只支持c89,要知道vc6可是98年的,c99都没见过~ c++也是98年才标准化,所以vc6对c++的支持也不完善。
sc_valentine21 2008-09-29
  • 打赏
  • 举报
回复
vc6不灵活的
prophetluo 2008-09-29
  • 打赏
  • 举报
回复
#include <stdio.h>

int main(){

printf("hello\n");

{
int i =2;
printf("i=%d\n",i);
}

return 0;


}

加对括号 什么编译器都米问题啦 O(∩_∩)O哈哈~ 既然是print的还能省下 stack空间哈哈
malu_1982 2008-09-29
  • 打赏
  • 举报
回复
C文件 的变量声明必须在一个语句块的开始部分
Arthur_ 2008-09-29
  • 打赏
  • 举报
回复
[Quote=引用 20 楼 likefermat 的回复:]
vc编译也不会有错的,
此外这个定义还可以在循环里面
for(int i=0;i <100;i++)
{
int j,k;
//....
}
[/Quote]

你的VC版本比较新吧, VC有身多版本哦, 似乎有个express什么的
kkndciapp 2008-09-29
  • 打赏
  • 举报
回复
程序没有问题,是不是楼主搞错了?或者编译器的问题?
likefermat 2008-09-29
  • 打赏
  • 举报
回复
vc编译也不会有错的,
此外这个定义还可以在循环里面
for(int i=0;i<100;i++)
{
int j,k;
//....
}
foxpeter 2008-09-28
  • 打赏
  • 举报
回复
学习了 原来VC6是c89标准的
hchen2008 2008-09-28
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 lbh2001 的回复:]
这个和VC6没关系
是C89的标准不允许在随便位置声明变量,只允许在块的开始处
C99和C++放松了限制,允许在随便位置声明变量,这个规定更合理
[/Quote]
比较合理
hichi2000 2008-09-28
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 lbh2001 的回复:]
这个和VC6没关系
是C89的标准不允许在随便位置声明变量,只允许在块的开始处
C99和C++放松了限制,允许在随便位置声明变量,这个规定更合理
[/Quote]

哦,了解了...这个解释也比较合理
Arthur_ 2008-09-28
  • 打赏
  • 举报
回复
VC6 采用的是c89

其它的和ls说的差不多。
lbh2001 2008-09-28
  • 打赏
  • 举报
回复
这个和VC6没关系
是C89的标准不允许在随便位置声明变量,只允许在块的开始处
C99和C++放松了限制,允许在随便位置声明变量,这个规定更合理
hichi2000 2008-09-28
  • 打赏
  • 举报
回复
Error Info:

Z:\c_code\define_var.c(8) : error C2143: syntax error : missing ';' before 'type'
Z:\c_code\define_var.c(9) : error C2065: 'i' : undeclared identifier

怎么可能没错?
lyghe 2008-09-28
  • 打赏
  • 举报
回复
VC6 汗 扔掉
yangkunhenry 2008-09-28
  • 打赏
  • 举报
回复

#include <stdio.h>

int main()
{
printf("hello\n");
int i =2;
printf("i=%d\n",i);
return 0;
}
hello
i=2
Press any key to continue

VC6.0没错啊?~~~
issacwoods 2008-09-28
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 tangtang02520 的回复:]
gcc能编译c++
会不会是gcc把它当c++程序编译了?
[/Quote]

应该不会吧,这应该是取决于你的后缀名,我cpp和c都是过,可以过
hichi2000 2008-09-28
  • 打赏
  • 举报
回复
它应该也是通过后缀来识别的吧?

我给它的是.c文件哦
issacwoods 2008-09-28
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 VBSpine 的回复:]
不同编译器对这个的支持度不同,不过现代的应该都可以了
[/Quote]

顶,我开始也以为是C98的标准,但是后来发现,确确实实是编译器的问题
加载更多回复(8)

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧