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