我正在创建一个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
的语法是否不支持函数外的循环?
如果不是,那为什么会发生这种情况?
答案 0 :(得分:9)
您正在定义匿名块,这是不允许的(它需要由函数定义预先设置,否则,编译器将永远不知道何时必须执行它)
在C中,每行代码但变量声明/初始化必须位于函数内。
可能出现在翻译单元顶层的唯一内容是声明或函数定义。
答案 1 :(得分:2)
你有什么是编程范式的混乱。如果我没有弄错(我可能是!只是猜测......)你熟悉python编程,这是用命令式范式编写的。这意味着在文件中,每行读取并自上而下逐行执行。在这样的范例中,您在函数之外提出的代码可以正常运行。
由于您使用C语言编写,因此您使用的是程序范例(或权威范例)。这意味着代码块将在过程(函数)中定义,并且可以引用过程到过程。调用一个过程启动程序,在C编程中,这一个过程是main()过程,由name识别。在过程之外编写的任何代码在语法上都是不正确的(我相信一些例外,宏等等......)。
由于正确的语法是C(以及所有其他过程编程语言)中程序编译的第一个要求,因此在尝试编译和运行此代码时会发生错误。
我希望这有助于增进了解!范式很有趣,它们是使用某种语言的规则。
答案 2 :(得分:1)
为了在C中执行循环,它必须在函数内部。否则编译器将不知道何时执行这段代码。在这种情况下,大多数C编译器都会给出编译器错误。只有变量初始化/声明才能出现在函数
之外#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;
}
答案 3 :(得分:1)
它与循环无关。所有语句都必须放在函数内部,否则......告诉我,你认为函数外部的代码什么时候必须运行?不知道?还有编译器
答案 4 :(得分:1)
只需将第一个元素初始化为零来定义数组,就可以将数组初始化为0。
int arr[50]={0};