名著阅读 > C语言解惑 > 13.3 消灭警告信息 >

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%delements
0x42404c
date%delements
0x46
  

4.不要忘记函数原型的声明

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