Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 我们不能在全局范围内编写任何赋值语句为什么?_C_Global Variables_Variable Assignment - Fatal编程技术网

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

是什么让你认为你应该能够编写函数中没有的任意代码?