编程时我遇到了一个不寻常的错误.当我在循环中初始化一个整数时,有时它表示该表达式无效,但有时它接受它.
这是我的代码,它给出了错误:
这是我的代码,它给出了错误:
int pow(int x,int n); int main() { int x,n,result; printf("Enter a number:\n"); scanf("%d",&x); printf("Enter its power:\n"); scanf("%d",&n); result=pow(x,n); printf("Result is %d\n",result); getch(); return 0; } int pow(int x,int n) { for(int i=1;i<n;i++) //<-- here it says that declaration Syntax error x=x*i; return x; }
当我改变它时:
int pow(int x,int n) { int i; for(i=1;i<n;i++) x=x*i; return x; }
解决方法
C89和早期版本仅支持块头部的声明语句(IOW,开头{和声明之间唯一可能出现的是另一个声明):
/* C89 and earlier */ int main(void) { int x; /* this is legal */ ... for (x = 0; x < 10; x++) { int i; /* so is this */ printf("x = %d\n",x); int j = 2*x; /* ILLEGAL */ } int y; /* ILLEGAL */ ... }
使用C99,声明语句几乎可以出现在任何地方,包括控制表达式(需要注意的是在使用之前必须声明某些内容):
// C99 and later,C++ int main(void) { int x; // same as before ... for (int i = 0; i < 10; i++) // supported as of C99 { printf("i = %d\n",i); int j = 2 * i; // supported as of C99 } int y; // supported as of C99 }
Turbo C早于C99标准,因此如果您想编写第二个示例中的代码,则需要使用更新的编译器.