为什么我们不能全局编写任何赋值语句?我的代码在
下面 #include <stdio.h>
static int i=10; //Initialization statement
i=25; //Assignment statement not possible why?
int main()
{
printf("%d",i);
return 0;
}
答案 0 :(得分:1)
这是一个“何时”的问题。
int i=10;
在编译时确定,i
在程序加载或首次开始运行时取值10
。
全球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;
}
答案 1 :(得分:0)
如果您需要一个变量存在于所有函数范围之外,您可以全局声明它,那么您的函数可以根据需要进行修改,而无需将变量传递给函数。
您正在做的是声明然后修改,那么为什么不将它声明为您真正想要的值?如果需要更改它,请根据需要更改函数中的变量。
虽然允许全局声明,但问问自己为什么不能在本地声明并将变量传递给函数。如果你无法正确回答这个问题,你可能不应该那样使用变量。请注意,维护大型程序将变得更加困难,您随意声明变量的次数就越多。
答案 2 :(得分:0)
C与(所谓的)脚本语言(如Ruby或Perl)的工作方式不同。
尽管看起来很像函数内部的代码(在大括号之间),但函数外部的代码实际上从未运行过。编译器使用它来声明和定义可以从实际运行的代码访问的变量。运行的代码在函数内定义。
当编译器编译程序时,它为每个函数生成可执行代码片段,然后“链接”然后一起生成最终程序。由于执行不是从文件的顶部开始,因此必须为此定义一个位置;在C中,编译器安排在运行程序时调用函数“main”。