警告信息是说明编译系统认为可能会存在问题。一般应该彻底消除这些信息。常见的问题及解决方法如下所述。
1.删除没有使用的变量
编译系统会对没有使用的变量给出警告信息。因为编译系统要为所有声明的变量分配内存,不用的变量仍然占用有效资源,所以系统给出提醒信息,要求确认一下是否还需要这些变量,如果真的不需要,就应该将它们删除。
2.指针必须初始化
如果声明的指针没有初始化,虽然可以在使用时正确初始化它们,但如果编译系统给出警告,则说明它们可能会产生不良后果。这时可以用“NULL”初始化它们。
3.正确进行数据类型转换
当存在混合运算时,系统会给出警告信息。这时可以用显式方式进行转换。使用指针时,也要注意数据类型是否一致,不一致则会给出警告信息。
下面的例子演示了指针类型转换的典型例子,注意其中0x42404c是先取得format的地址,然后把这个地址填入如下语句的,不仅保证pc指向有效,而且是指向format。
pc = (char * )0x42404c ;
【例13.2】演示强制转换的例子。
#include<stdio.h> int main (void ) { const char *format ="date%delements" ; char c = 'F' , *pc ; int *p ; int value , addr , x=35 ; void *vp = &x ; p = (int* )&format ; // 强制转换赋给整数指针 value = *p ; puts ( (char* )value ); // 再强制转换为字符指针输出 p= (int * )vp ; // 强制转换指针类型 addr = (int )&c ; // 将地址值强制转换为整型值 printf ("%#x\n" , format ); // 本机分配给它的地址供下一语句使用 pc = (char * )0x42404c ; // 将上面的地址强制转换成字符指针 printf ("%s \n" , pc ); // 验证两者内容相等否 printf ("%#x \n" , * ( char * )addr ); // 强制转换整数值为字符指针,输出F 的编码 return 0 ; }
程序运行结果如下:
date%delements 0x42404c date%delements 0x46
4.不要忘记函数原型的声明
有时对整型类型的函数忘记声明,这将会引起编译系统给出警告信息,要用户验证是否能作为整型函数处理。应该给予正确的函数声明,消除警告信息。