警告信息是說明編譯系統認為可能會存在問題。一般應該徹底消除這些信息。常見的問題及解決方法如下所述。
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.不要忘記函數原型的聲明
有時對整型類型的函數忘記聲明,這將會引起編譯系統給出警告信息,要用戶驗證是否能作為整型函數處理。應該給予正確的函數聲明,消除警告信息。