我们不能在全球写任何赋值语句为什么?

时间:2015-02-07 06:24:47

标签: 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;
}

3 个答案:

答案 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”。