2015-02-07 55 views
2

为什么我们不能在全球范围写任何赋值语句呢?我的代码如下为什么我们不能在全局编写任何赋值语句?

#include <stdio.h> 
    static int i=10; //Initialization statement 
    i=25;    //Assignment statement not possible why? 
    int main() 
{ 
printf("%d",i); 
return 0; 
} 
+0

是什么让你认为你应该能够编写不在函数中的任意代码? – John3136 2015-02-07 06:29:07

回答

0

如果您需要一个变量来的所有的功能范围之外的存在,你可以全局声明它,然后根据需要你的函数可以修改而无需将变量传递给函数。

你在做什么是声明,然后修改,那么为什么不把它声明为你真正想要的值?如果您需要更改它,请根据需要更改函数中的变量。

虽然允许全局声明,但问问自己为什么不能在本地声明并将变量传递给函数。如果你不能正确回答这个问题,那么你可能不应该以这种方式使用变量。请注意,维护一个大型程序会变得越来越困难,您越是随意地声明变量。

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; 
} 
0

C对一种(所谓的)脚本语言(如Ruby或Perl)有不同的作用。

尽管看起来很像一个函数内的代码(在大括号之间),但函数外的代码从未实际运行。编译器使用它来声明和定义可以从实际运行的代码访问的变量。运行的代码在函数内部定义。

当编译器编译一个程序时,它会为每个函数生成可执行代码片段,然后“链接”在一起以产生最终的程序。由于执行不是从文件顶部开始,所以必须为此定义一个位置;在C中,编译器安排在运行程序时调用函数“main”。