c语言 关于先定义后赋值报错的问题。

#include<stdio.h>
main()
{
int a,b,c;
a=5;
b=4;
c=3;

int s,t;
if(a>b&&a>c) s=a;
else s=0;
t=!(a-c>1||2&&0);
printf("s=%d,t=%d\n",s,t);
}
这段代码调试的时候报错如下:
F:\c语言\004.c(9) : error C2143: syntax error : missing ';' before 'type'
F:\c语言\004.c(10) : error C2065: 's' : undeclared identifier
F:\c语言\004.c(12) : error C2065: 't' : undeclared identifier
但是将定义赋值改成 int a=5,b=4,c=3; 则正常,我想问为什么?有什么不对吗?

C89 规定 在函数体开头 把要用的变量都定义好
除非是 局部变量 用 { } 括起来

这就导致
int a,b,c;
a=5;
b=4;
c=3;

int s,t;

会报错
要改成
int a,b,c;
int s,t;
a=5;
b=4;
c=3;
才行

+++++++++++++++++

C99 规定 可以 在需要某个变量的时候再定义变量,
不用在函数体开头 把一大堆变量都定义好追问

非常感谢这么详细的回答。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-08-09
额,是这样的,在C语言里面,代码必须是
1。声明变量
2.代码
你把int s,t;放到
a=5;
b=4;
c=3;
前面就可以了。、
不过有个警告,你在main函数前面加个
void main追问

可以简要说一下main 和 void main 有什么不一样吗?一直没搞懂。

追答

抱歉,刚才我用的是C++编译器,说错了。
C和C++有点小区别。

追问

谢谢解答。

追答

抱歉,刚才我用的是C++编译器,说错了。
C和C++有点小区别。
void main 和main基本没区别,但最好加void ,因为程序编译时会有警告的。表示main函数没有返回值。

第2个回答  2012-08-09
c语言中必须把定义放在前面在使用...c++中可以随时定义随时使用
第3个回答  2012-08-09
你用的估计是老掉牙的tc这样的编译器,你把int s,t;放前面就好了, 老式的C编译器要求所有变量的声明放前面追问

我用的是vc6.0 就图个方便。

追答

那你源文件肯定是.c,而不是.cpp,vc6也太老了,快15年了

追问

呵呵,我下的是免安装版的,从xp到win732位到现在的64位,都能直接用,不用重装。要不早删除了。

相似回答