首页 » C语言解惑 » C语言解惑全文在线阅读

《C语言解惑》13.3 消灭警告信息

关灯直达底部

警告信息是说明编译系统认为可能会存在问题。一般应该彻底消除这些信息。常见的问题及解决方法如下所述。

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.不要忘记函数原型的声明

有时对整型类型的函数忘记声明,这将会引起编译系统给出警告信息,要用户验证是否能作为整型函数处理。应该给予正确的函数声明,消除警告信息。