C 中的 for 循环问题
Issue with for loop in C
我正在创建一个 int
数组并将其所有元素 0
放入 C
。
使用:
int arr[50],i;
for(i=0;i<50;i++){
arr[i]=0;
}
如果在函数内部或 main()
中使用,效果很好,例如:
int main(){
int arr[50],i;
for(i=0;i<50;i++){
arr[i]=0;
}
return 0;
}
但是如果我们在任何函数之外使用代码,就会发生一些奇怪的事情,例如:
#include <stdio.h>
int arr[50],i;
for(i=0;i<50;i++){
arr[i]=0;
}
int main()
{
printf("Hello World!");
return 0;
}
编译时出现错误:
error: expected identifier or '(' before 'for'
for(i=0;i<50;i++){
^
这么说来,C
的语法是不是不支持函数外循环?
如果不是,那为什么会这样?
你正在定义一个 anonymous 块,这是不允许的(它需要在函数定义之前,否则,编译器永远不知道什么时候它必须执行它)。
在 C 语言中,除变量 declaration/initialization 之外的每一行代码都必须位于函数中。
可能出现在翻译单元顶层的只有声明或函数定义。
要在 C 中执行循环,它必须在函数内部。否则编译器将不知道何时执行这段代码。在这种情况下,大多数 C 编译器都会给出编译错误。只有变量 initialisations/declarations 可以出现在函数外部
#include <stdio.h>
int arr[50],i;
/* This piece will not get executed
for(i=0;i<50;i++){
arr[i]=0;
}
*/
int main()
{
printf("Hello World!");
return 0;
}
这与循环无关。所有的语句都必须放在函数里面,否则...告诉我,你认为什么时候函数外面的代码必须是运行?不知道?还有编译器
您可以通过将数组的第一个元素初始化为零来将其初始化为 0。
int arr[50]={0};
您在这里遇到的是 编程范式 的混乱。如果我没记错的话(我可能是!只是猜测...)您熟悉 python 编程,它是用命令式范式编写的。这意味着在一个文件中,每一行都是自上而下逐行读取和执行的。在这样的范例中,您提出的 函数之外的代码 将运行良好。
由于您是用 C 语言编写的,所以您是在 过程范式 (或最终范式)中编写的。这意味着代码块将在过程(函数)中定义,并且可以在过程之间引用。调用一个过程启动程序,在 C 编程中,这个过程是 main() 过程,通过名称识别。在过程之外编写的任何代码在语法上都是不正确的(我相信有些例外,宏等......)。
由于正确的语法是 C(以及所有其他过程编程语言)程序编译的首要要求,因此在尝试编译和 运行 这段代码时会发生错误。
我希望这有助于加深理解!范式很有趣,它们是使用某种语言的规则。
我正在创建一个 int
数组并将其所有元素 0
放入 C
。
使用:
int arr[50],i;
for(i=0;i<50;i++){
arr[i]=0;
}
如果在函数内部或 main()
中使用,效果很好,例如:
int main(){
int arr[50],i;
for(i=0;i<50;i++){
arr[i]=0;
}
return 0;
}
但是如果我们在任何函数之外使用代码,就会发生一些奇怪的事情,例如:
#include <stdio.h>
int arr[50],i;
for(i=0;i<50;i++){
arr[i]=0;
}
int main()
{
printf("Hello World!");
return 0;
}
编译时出现错误:
error: expected identifier or '(' before 'for'
for(i=0;i<50;i++){
^
这么说来,C
的语法是不是不支持函数外循环?
如果不是,那为什么会这样?
你正在定义一个 anonymous 块,这是不允许的(它需要在函数定义之前,否则,编译器永远不知道什么时候它必须执行它)。
在 C 语言中,除变量 declaration/initialization 之外的每一行代码都必须位于函数中。
可能出现在翻译单元顶层的只有声明或函数定义。
要在 C 中执行循环,它必须在函数内部。否则编译器将不知道何时执行这段代码。在这种情况下,大多数 C 编译器都会给出编译错误。只有变量 initialisations/declarations 可以出现在函数外部
#include <stdio.h>
int arr[50],i;
/* This piece will not get executed
for(i=0;i<50;i++){
arr[i]=0;
}
*/
int main()
{
printf("Hello World!");
return 0;
}
这与循环无关。所有的语句都必须放在函数里面,否则...告诉我,你认为什么时候函数外面的代码必须是运行?不知道?还有编译器
您可以通过将数组的第一个元素初始化为零来将其初始化为 0。
int arr[50]={0};
您在这里遇到的是 编程范式 的混乱。如果我没记错的话(我可能是!只是猜测...)您熟悉 python 编程,它是用命令式范式编写的。这意味着在一个文件中,每一行都是自上而下逐行读取和执行的。在这样的范例中,您提出的 函数之外的代码 将运行良好。
由于您是用 C 语言编写的,所以您是在 过程范式 (或最终范式)中编写的。这意味着代码块将在过程(函数)中定义,并且可以在过程之间引用。调用一个过程启动程序,在 C 编程中,这个过程是 main() 过程,通过名称识别。在过程之外编写的任何代码在语法上都是不正确的(我相信有些例外,宏等......)。
由于正确的语法是 C(以及所有其他过程编程语言)程序编译的首要要求,因此在尝试编译和 运行 这段代码时会发生错误。
我希望这有助于加深理解!范式很有趣,它们是使用某种语言的规则。