警告信息是说明编译系统认为可能会存在问题。一般应该彻底消除这些信息。常见的问题及解决方法如下所述。
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%delements0x42404cdate%delements0x46
4.不要忘记函数原型的声明
有时对整型类型的函数忘记声明,这将会引起编译系统给出警告信息,要用户验证是否能作为整型函数处理。应该给予正确的函数声明,消除警告信息。