定义
1、定义只能定义一次,定义多次编译时会报重复定义的错误
2、定义时系统会为变量在内存中分配存储空间
3、定义时可初始化也可不初始化,全局变量和静态变量系统会给一个默认的初始化0
声明
1、声明时不分配内存,但是会生成一个符号,用于在连接阶段找到真正定义的位置,这中间还存在一个符号选择的问题;
在C语言中,函数和初始化的全局变量(包括显示初始化为0)是强符号,未初始化的全局变量是弱符号。
对于它们,下列三条规则使用:
① 同名的强符号只能有一个,否则编译器报"重复定义"错误。
② 允许一个强符号和多个弱符号,但定义会选择强符号的。
③ 当有多个弱符号相同时,链接器选择占用内存空间最大的那个。
C++中没有强弱符号之分
2、可以多次声明,加上extern就好了
3、也可初始化也可不初始化,一般不初始化