C 我们不能在全局范围内编写任何赋值语句为什么?
为什么我们不能全局编写任何赋值语句?我的代码如下C 我们不能在全局范围内编写任何赋值语句为什么?,c,global-variables,variable-assignment,C,Global Variables,Variable Assignment,为什么我们不能全局编写任何赋值语句?我的代码如下 #include <stdio.h> static int i=10; //Initialization statement i=25; //Assignment statement not possible why? int main() { printf("%d",i); return 0; } #包括 静态积分i=10//初始化语句 i=25//赋值语句不可能为什么? int
#include <stdio.h>
static int i=10; //Initialization statement
i=25; //Assignment statement not possible why?
int main()
{
printf("%d",i);
return 0;
}
#包括
静态积分i=10//初始化语句
i=25//赋值语句不可能为什么?
int main()
{
printf(“%d”,i);
返回0;
}
如果您需要一个变量存在于所有函数的作用域之外,您可以全局声明它,然后您的函数可以根据需要进行修改,而无需将变量传递给函数
您所做的是声明然后修改,那么为什么不将其声明为您真正想要的值呢?如果需要更改,请根据需要更改函数中的变量
尽管全局声明是允许的,但是问问自己为什么不能在本地声明并将变量传递给函数。如果你不能正确回答这个问题,你可能不应该这样使用变量。请注意,维护一个大型程序将变得更加困难,您随意声明的变量越多。这是一个“何时”的问题
inti=10代码>在编译时确定,当程序加载或首次开始运行时,i
的值为10
A全局i=25代码>没有序列。对于多个链接的文件,除了链接顺序之外,无法控制这些“全局”代码的运行顺序
通过移动int i=10
进入main()
,确定求值顺序
#include <stdio.h>
static int i=10;
int main(void) {
printf("%d",i);
i=25;
printf("%d",i);
return 0;
}
#包括
静态积分i=10;
内部主(空){
printf(“%d”,i);
i=25;
printf(“%d”,i);
返回0;
}
C的工作原理与(所谓的)脚本语言不同,如Ruby或Perl
尽管看起来很像函数内部的代码(在花括号之间),但函数外部的代码从未真正运行过。编译器使用它来声明和定义可以从实际运行的代码中访问的变量。运行的代码在函数中定义
当编译器编译一个程序时,它会为每个函数生成可执行代码片段,然后“链接”在一起生成最终程序。由于执行不会从文件顶部开始,因此必须为此定义一个位置;在C语言中,编译器会安排在运行程序时调用函数“main”。是什么让你认为你应该能够编写函数中没有的任意代码?