实例测试1--DEV-C++环境 :
#include
//全局整形变量
int int_var1;
static int stc_int_var1;
short int sht_int_var1;
long int log_int_var1;
//全局指针变量
char *int_opt1;
int main()
{
//局部整形变量
int int_var2;
static int stc_int_var2;
short int sht_int_var2;
long int log_int_var2;
//局部指针变量
char *int_opt2;//局部指针变量不初始化打印不出来
printf("int_var1=%d,stc_int_var1=%d,sht_int_var1=%hd,log_int_var1=%ld,int_opt1=%s\n", int_var1, stc_int_var1, sht_int_var1, log_int_var1, int_opt1);//全局变量
printf("int_var2=%d,stc_int_var2=%d,sht_int_var2=%hd,log_int_var2=%ld,int_opt2=%s\n", int_var2, stc_int_var2, sht_int_var2, log_int_var2, int_opt2);//局部变量
return 0;
}
修改:将局部字符指针初始化 char *int_opt2 = NULL;
总结1:
Dev-C++环境下,全局未初始化变量均设置为默认值(int类型默认值0;字符指针默认null)
局部未初始化变量,整形设置默认值0;指针未初始化变量不打印不报错!
实例测试2--GCC环境
#include
//全局整形变量
int int_var1;
static int stc_int_var1;
short int sht_int_var1;
long int log_int_var1;
//全局指针变量
char *int_opt1;
int main()
{
//局部整形变量
int int_var2;
static int stc_int_var2;
short int sht_int_var2;
long int log_int_var2;
//局部指针变量
char *int_opt2;
printf("int_var1=%d,stc_int_var1=%d,sht_int_var1=%hd,log_int_var1=%ld,int_opt1=%s\n", int_var1, stc_int_var1, sht_int_var1, log_int_var1, int_opt1);//全局变量
printf("int_var2=%d,stc_int_var2=%d,sht_int_var2=%hd,log_int_var2=%ld,int_opt2=%s\n", int_var2, stc_int_var2, sht_int_var2, log_int_var2, int_opt2);//局部变量
return 0;
}
修改:随机去掉两个局部变量
总结2:
GCC环境下,全局未初始化变量设置默认值(int类型默认值0;字符指针默认null)
局部未初始化变量有时设置随机值或者默认值
实例测试3--VS2013环境:
总结3:
VS2013环境,全局未初始化变量设置默认值(int类型默认0,指针默认null)
局部未初始化变量只定义不使用(警告);定义+使用(报错)
总结:
1. 局部变量未初始化,初值为随机值:C规范对该初值并没有做规定,具体实现由编译器决定。
2.全局变量未初始化,默认设置为初值。
3.局部未初始化变量,编译通过与否与具体编译环境相关。
结论:无论任何时候,变量初始化!