讀古今文學網 > 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.不要忘記函數原型的聲明

有時對整型類型的函數忘記聲明,這將會引起編譯系統給出警告信息,要用戶驗證是否能作為整型函數處理。應該給予正確的函數聲明,消除警告信息。