C++不能在全局作用域单独给变量赋值

c++不能在全局作用域单独的给变量赋值
全局作用域:
int i;
i=666; 报错: ‘i’ does not name a type
int i;
int j=i=666;OK!
为什么会这样啊!感觉好奇怪。

  1. 变量的声明,就是告诉编译器,你后面要用到一个什么类型的变量,他的名字是什么。
  2. 变量的定义,一般情况下是与变量的声明在一起进行的,包含变量的初始化过程。
    比如:int i; 这是一个没有初始化过程的变量定义。
    比如:int j=666; 这条语句包含声明和定义两个部分,定义的部分就是变量的初始化赋值。
    比如:int j=i=666;这条语句包含一个声明和两个定义,j和i都进行了初始化赋值。
    定义过程中的初始化赋值是可以的,因为定义的过程就是要在内存中分配存储空间,分配过程中可以初始化一个值给这个空间。
  3. 楼主在全局区域写的 i=666; 赋值语句是不能够执行的。
    语法规定,空白区域只允许定义和声明变量和函数,不允许干其他事情。除了声明和定义以外的语句,都要写在函数体里面。
    当然,函数体里面也允许声明和定义局部变量。

楼主没必要感觉奇怪,只要知道这是语法规定的就好。
空白区域只允许声明和定义变量/函数,除此之外的语句都要写到函数体里面,通过调用函数来执行语句。
等你学过《操作系统》和《编译原理》之后,就知道这是为什么了。

函数内可以只赋值,函数外不能只赋值。脚本语言除外。

C语言 是面向函数编程的语言,里面的任何功能的实现,都是通过函数调用来完成的。
(C++是C的扩展,编译器底层还是和C程序一样,面向函数进行的编译。先学好C吧,这是基础。)
而函数体里面就写着各种实现功能的语句以及子函数。
程序的入口函数是main函数,一个程序通常只能有一个main函数。
空白处用来定义和声明变量和函数,不能执行语句。
变量的定义过程中,只允许初始化赋值,其他行为都不被允许。


这没什么好奇葩的,习惯了就好了。
你往后面学,Windows桌面开发,会有更奇葩的事情发生。如果稍不注意,就彻底糊涂了。