1. 程式人生 > >gcc 常見的編譯錯誤,警告總結

gcc 常見的編譯錯誤,警告總結

最近開始寫部落格了,而且總會有人問一些編譯警告,錯誤怎麼回事,怎麼修改的問題,於是決定開始認真總結平時遇到的相關問題。今天就開始慢慢積累總結吧,也建議大家平時養成總結的好習慣,即使從現在開始也不晚。好的開始等於成功了一半。


1、error: invalid operands to binary - (have 'unsigned int' and 'char *')
說明:二元減法運算的運算元無效。

2、warning: array subscript has type 'char'
說明:這個warning是說,陣列的下標被定義成char型了,由於char型有可能是負數,因 此會產生難以 預料的錯誤。

修改:把 char 修改 unsigned char 型 

3、warning:dereferencing pointer 'IpAddr.38' does break strict-aliasing rules
說明:Strict aliasing 是C或C++編譯器的一種假設:不同型別的指標絕對不會指向同一塊記憶體區域。

舉例說明:
uint32_t IpAddr;
strcat(p, inet_ntoa(*(struct in_addr *)&IpAddr));

修改方法:

uint32_t IpAddr;

struct in_addr IpAddrEx;

struct in_addr IpAddrEx;

strcat(p, inet_ntoa(IpAddrEx));

4、warning: no newline at end of file

說明:在檔案最後一行加上回車鍵,c/c++程式碼的每一行後面有一個“結束符”,也就是newline。避免當被include的檔案展開後,    前一個檔案的最後一行與後一個檔案的第一行直接被連線成一行從而造成錯誤。

5、warning: assignment discards qualifiers from pointer target type
說明:賦值時,取消了右值的限定。一般是左右值不匹配,例如 char = unsigned char;

warning: comparison is always false due to limited range of data type
說明:由於型別限制,比較一直是假


6、warning: comparison is always true due to limited range of data type
說明:由於資料類型範圍的限制,比較結果一直為真。比如 unsigned int 一直大於 0

7、warning: return makes pointer from integer without a cast
說明:return使integer轉換為pointer,沒有加強制型別轉換。

8、warning: initialization from incompatible pointer type
說明:不相容指標型別的初始化

9、warning: initialization discards qualifiers from pointer target type
說明:initialization取消了指標目標型別的限定。

10、warning: assignment from incompatible pointer type
說明:不相容的指標間賦值

11、warning: passing argument 1 of 'mes_read_time' discards qualifiers from pointer target type12、
說明:mes_函式第一個引數的傳遞,丟棄了指標目標型別限定。

12、warning: 'return' with a value, in function returning void
說明:在void返回型別的函式中,return返回值。同樣 int Func();函式沒有返回值,都是錯誤的。

13、Waring:backslash and newline separated by space

說明因為後面多了一個空格.發生在巨集寫錯時。

14、error: a label can only be part of a statement and a declaration is not a statement

switch(a)
{
<span style="white-space:pre">	</span>case 1:
<span style="white-space:pre">	</span>int id = 0;....................
<span style="white-space:pre">	</span>....................
<span style="white-space:pre">	</span>break;
<span style="white-space:pre">	</span>case 2:
<span style="white-space:pre">	</span>break;
}
case1:

//case語句中不能再宣告變數,如果宣告變數可以使用括號括起來。

15、warning: declaration of 'tb' shadows a global declaration

說明:出現這種警告的時候,檢視您的變數宣告與函式引數中的名字是否相同,修改為不同的名字既可解決。

16、warning: this decimal constant is unsigned only in ISO C90

1 在常數後面增加一個UL標識,或者ULL表示,如4294967295UL,這樣就不會報警了
2 使用十六進位制的數字,如0xFFFFFFFF
3 使用gcc -std=c99 用99標準來編譯


PS:今天暫時寫到這裡,以後遇到問題隨時更新。

相關推薦

gcc 常見編譯錯誤警告總結

最近開始寫部落格了,而且總會有人問一些編譯警告,錯誤怎麼回事,怎麼修改的問題,於是決定開始認真總結平時遇到的相關問題。今天就開始慢慢積累總結吧,也建議大家平時養成總結的好習慣,即使從現在開始也不晚。好的開始等於成功了一半。1、error: invalid operands t

C編譯錯誤執行錯誤以及常見問題。

1.  在原始碼中遺失“;” 偵錯程式錯誤資訊:syntax error : missing ';' 2.  缺少名稱空間使用定義:即缺少“using namespace std;” 偵錯程式錯誤資訊:例:error C2065: 'cout' : undeclared identifier 例如cout/c

cmake編譯錯誤警告視為錯誤的解決方法

原部落格地址:https://blog.csdn.net/maxsky/article/details/50849219解釋一下途中框起來的部分,第一個框其實就是失敗的關鍵,解決方法很簡單既然他提示了“警告被視為錯誤”,那麼在 VS 裡確有這一個設定項的,關掉就好(針對 VS

第1章第2講常見編譯錯誤與調試

spl ima play .com style src left 調試 isp 第1章第2講常見編譯錯誤與調試

常見編譯錯誤(更新中...)

一、 無法解析的外部符號 [email protected],該符號在函式 ___tmainCRTStartup 中被引用 #include using namespace std; int main() { cout <<“This is a C++ progra

C語言程式設計時常見錯誤看看你中招了嗎?

雲上傘 C編譯的程式對語法檢查並不像其它高階語言那麼嚴格,這就給程式設計人員留下“靈活的餘地”,但還是由於這個靈活給程式的除錯帶來了許多不便,尤其對初學C語言的人來說,經常會出一些連自己都不知道錯在哪裡的錯誤。看著有錯的程式,不知該如何改起,通過對C的學習,積累了一些C程式設計時常犯的錯誤,

Java中兩個byte型別相加結果賦值給byte型別的變數會報編譯錯誤byte加byte的結果為什麼是int?

背景: 之前偶然看到有討論這個問題,在網上搜了半天,結果都不盡如人意,解釋沒有到位, 有的說byte加byte預設就是int,那為什麼這麼做呢? 這不是找麻煩麼?這種奇怪的預設還有哪些?帶來一些列疑問。。。。。。 有的說byte儲存的就是整型資料,這種說法的對錯姑且不論,至少我覺得難免有

qt例子不能執行qt編譯錯誤qmake不能呢執行;error while building deploying解決

qt creator報錯error while building deploying project 在進行qt creator編譯qt工程時,報出錯誤:error while building deploying project。 還可能出現不能執行qma

編譯錯誤的原因總結

概要:程式語言是一門語言,自然語言如漢語,英語也都是一門語言;同為一門語言,那麼就都有語言方面的一些類似特性。當然其中也有最本質的區別,自然語言的意義在於幫助人與人交流,而程式語言則幫助人與機器交流的同時,也要幫助人與人交流。 程式語言中的編譯錯誤,實質上可以

MTK 編譯錯誤perl 找不到 WIN32/OLE.pm

MTK 程式碼編譯時出現如下錯誤: Can't locate Win32/OLE.pm in @INC (@INC contains: /usr/lib/perl5/5.8.8/msys /usr /lib/perl5/5.8.8 /usr/lib/perl5/site_p

5.1編譯錯誤 提示kernel-3.10 is not clean, please run 'make mrproper'

kernel-3.10 is not clean, please run 'make mrproper' 你看看 kernel-3.10\include下面是不是有個config的資料夾,把它刪了,就可以了 make ARCH=arm64 xxxx_defconfig #

maven專案編譯錯誤在target/classes找不到相應的mapper.xml檔案

myeclipese的maven專案RUN AS->MAVEN BUILD時,編譯不出錯,執行時報是和mapper有關的。這個問題找了好久。發現一篇寫的很類似我的錯誤https://blog.csdn.net/weimezilie/article/details/519

C++編譯錯誤連線錯誤執行錯誤

摘自別人: (1) 編譯錯誤:就是編譯器無法進行繼續編譯的錯誤,最基本的就是語法錯誤了,比如語句後面少了;或者 } 不匹配之類的,選擇題一般是這樣。編譯錯誤可以由編譯器檢查出來。 (2) 執行時錯誤:分為兩類:1. 由於考慮不周或者輸入錯誤導致程式異常,比如

C++ 常見編譯錯誤

1. 錯誤:expected unqualified-id before ‘using’   其實就是類聲明後面沒有加分號導致的。 類宣告的時候沒有加分號,還可能導致一個錯誤 錯誤:一個宣告指定了多個型別 解決辦法:分別檢查包含進來的檔案,類宣告,結構體聲明後面有沒有加

C語言常見編譯錯誤與執行錯誤

hello: line 1: syntax error: unexpected word (expecting “)”) 編寫fasync_jni應用程式放在Tiny210開發板上跑會出現如下錯誤: 然後編寫一個最簡單的hello world程式放在Ti

記錄一些常見編譯錯誤

1、程式包org.apache.http不存在,類裡邊提示爆紅 解決方法: build.gradle中,在buildToolsVersion下邊,defaultConfig上邊,新增如下程式碼 useLibrary 'org.apache.http.legacy' 如

解決 Debug編譯警告:warning LNK4099: 未找到 PDB“vc90.pdb”

警告:warning LNK4099: 未找到 PDB“vc90.pdb” 當多個Project是分開編譯的,主專案和子專案的pdb檔名相同(預設都是vc90.pdb或vc100.pdb)從而造成

Xcode 警告錯誤解決方法總結

從sdk3.2.5升級到sdk 7.1中間廢棄了很多的方法,還有一些邏輯關係更加嚴謹了。1,警告:“xoxoxoxo”  is deprecated解決辦法:檢視xoxoxoxo的這個方法的文件,替換掉這個方法即可。2,警告:Declaration of "struct sockaddr" will n

nginx常見內部引數錯誤總結

1、日誌簡介 nginx日誌主要有兩種:訪問日誌和錯誤日誌。訪問日誌主要記錄客戶端訪問nginx的每一個請求,格式可以自定義;錯誤日誌主要記錄客戶端訪問nginx出錯時的日誌,格式不支援自定義。兩種日誌都可以選擇性關閉。 通過訪問日誌,你可以得到使用者地域來源、跳轉來源、使用終端、某個URL訪問量等相關資訊

c++經常遇到的編譯錯誤總結以及vc++進行debug的方法

“object of abstract class type..is not allowed” 這樣的編譯錯誤經常出現在建立物件的時候,一般是因為該類的介面或者抽象類中有某個方法還沒有實現,或