起因
今天在vs2010中撰寫代碼的時候,定義了一個函式 bool funcA(void);編譯的時候,莫名其妙的報了個錯誤:
error C2061: 語法錯誤: 識別符號“funcA”,
funcA明明已經定義了,在頭檔案中也宣告了,但是編譯器就認定 funcA無法識別,
解決歷程
剛開始以為函式名起的不規范,重新命名后依然報同樣的錯,解決失敗,
接著懷疑是不是頭檔案重復包含了,理了一遍頭檔案包含關系,確認沒問題,
最后想著函式的型別是否有問題,引數型別void這絕對沒有問題,函式回傳型別bool應該也沒問題啊,bool是c語言的基本型別啊,
但經過幾番折騰后發現,罪魁禍首偏偏就是函式回傳型別bool,
bool是標準C/C++中的布爾量,占一個位元組大小記憶體,只有false或者true兩種值,但是C語言是從C99才開始支持布爾型的,然而VS2010是不支持C99標準的,這是造成此次血案的根本原因,
BOOL是VS自家定義的宏:
typedef int BOOL;
#define FALSE 0
#define TRUE 1
也就是說BOOL其實是int型別,占四個位元組大小記憶體,其值為FALSE或TRUE,
解決方法
知道原因就好辦了,將bool funcA(void)重新定義成BOOL funcA(void),編譯成功,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/139765.html
標籤:其他
