初学者请教C中变量定义位置问题
书上说变量不一定定义在函数开头只要在使用前定义就可以了但是请高手看看为什么我这段代码这样定义就会报错
目的是用冒泡法排序
首先我这样没有问题
#include <stdio.h>
int main()
{
int num[10], i, j, k, t, l;
for( i = 0; i < 10; i++ )
{
printf( "please input number %d: ", i + 1 );
scanf( "%d", &num[i] );
}
for( j = 0; j < 9; j++ )
{
for( k = 0; k < 9 - j; k++ )
{
if( num[ k ] > num[ k + 1 ] )
{
t = num[ k ]; num[ k ] = num[ k + 1 ]; num[ k + 1 ] = t;
}
}
}
for( l = 0; l < 10; l++ )
{
printf( "%d", num[ l ] );
}
return 0;
}
但是当我这样定义时就会报错
#include <stdio.h>
int main()
{
int num[10], i;
for( i = 0; i < 10; i++ )
{
printf( "please input number %d: ", i + 1 );
scanf( "%d", &num[i] );
}
int j, k, t, l;
for( j = 0; j < 9; j++ )
{
for( k = 0; k < 9 - j; k++ )
{
if( num[ k ] > num[ k + 1 ] )
{
t = num[ k ]; num[ k ] = num[ k + 1 ]; num[ k + 1 ] = t;
}
}
}
for( l = 0; l < 10; l++ )
{
printf( "%d", num[ l ] );
}
return 0;
}
报错是:
1>------ 已启动生成: 项目: Test, 配置: Debug Win32 ------
1>生成启动时间为 2013/9/24 23:36:15。
1>ClCompile:
1> test1.c
1>f:\c++project\test\test\test1.c(10): warning C4996: 'scanf': This function or variable may be unsafe. Consider using scanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
1> f:\program files (x86)\microsoft visual studio 10.0\vc\include\stdio.h(304) : 参见“scanf”的声明
1>f:\c++project\test\test\test1.c(13): error C2143: 语法错误 : 缺少“;”(在“类型”的前面)
1>f:\c++project\test\test\test1.c(14): error C2065: “j”: 未声明的标识符
1>f:\c++project\test\test\test1.c(14): error C2065: “j”: 未声明的标识符
1>f:\c++project\test\test\test1.c(14): error C2065: “j”: 未声明的标识符
1>f:\c++project\test\test\test1.c(16): error C2065: “k”: 未声明的标识符
1>f:\c++project\test\test\test1.c(16): error C2065: “k”: 未声明的标识符
1>f:\c++project\test\test\test1.c(16): error C2065: “j”: 未声明的标识符
1>f:\c++project\test\test\test1.c(16): error C2065: “k”: 未声明的标识符
1>f:\c++project\test\test\test1.c(18): error C2065: “k”: 未声明的标识符
1>f:\c++project\test\test\test1.c(18): error C2065: “k”: 未声明的标识符
1>f:\c++project\test\test\test1.c(20): error C2065: “t”: 未声明的标识符
1>f:\c++project\test\test\test1.c(20): error C2065: “k”: 未声明的标识符
1>f:\c++project\test\test\test1.c(20): error C2065: “k”: 未声明的标识符
1>f:\c++project\test\test\test1.c(20): error C2065: “k”: 未声明的标识符
1>f:\c++project\test\test\test1.c(20): error C2065: “k”: 未声明的标识符
1>f:\c++project\test\test\test1.c(20): error C2065: “t”: 未声明的标识符
1>f:\c++project\test\test\test1.c(25): error C2065: “l”: 未声明的标识符
1>f:\c++project\test\test\test1.c(25): error C2065: “l”: 未声明的标识符
1>f:\c++project\test\test\test1.c(25): error C2065: “l”: 未声明的标识符
1>f:\c++project\test\test\test1.c(27): error C2065: “l”: 未声明的标识符
1>
1>生成失败。
1>
1>已用时间 00:00:00.21
========== 生成: 成功 0 个,失败 1 个,最新 0 个,跳过 0 个 ==========
[解决办法]
for( i = 0; i < 10; i++ )
{
printf( "please input number %d: ", i + 1 );
scanf( "%d", &num[i] );
}
int j, k, t, l;
C里,变量要定义在语句前面~
[解决办法]
看看不同的标准,C99对C89做了不少改进。C99应该是支持随处定义的。
[解决办法]
C语言不支持在函数中间申明或者定义变量!
移到函数开头或者全局
[解决办法]
C99的确是支持任意位置声明的,但别忘了VS至今未实现C99标准,gcc的话默认是C89,要添加-std=c99参数,不知道现在是不是默认支持c99的,很久没碰了,Clang倒是默认为C99的。
如果C和C++代码差别不大,可以用cpp后缀,让VS用C++的方式编译。
[解决办法]
扩展名.c和.cpp不是一回事!
[解决办法]
用的什么compiler?
[解决办法]
microsoft有自己的规定
只要在使用前声明即可
[解决办法]
如果是C语言
定义变量请移到函数开头或者全局