C语言中变量未初始化的处理

实例测试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;	
} 

C语言中变量未初始化的处理_第1张图片

修改:将局部字符指针初始化 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环境:

C语言中变量未初始化的处理_第2张图片

C语言中变量未初始化的处理_第3张图片

 总结3:

        VS2013环境,全局未初始化变量设置默认值(int类型默认0,指针默认null)

        局部未初始化变量只定义不使用(警告);定义+使用(报错)

总结:

        1. 局部变量未初始化,初值为随机值:C规范对该初值并没有做规定,具体实现由编译器决定。

        2.全局变量未初始化,默认设置为初值。

        3.局部未初始化变量,编译通过与否与具体编译环境相关。

结论:无论任何时候,变量初始化!

你可能感兴趣的:(Linux/C语言,c语言,变量初始化)