一、遇到錯誤expected initializer before ‘class’
根據這一篇 博客 的解釋,編譯時各代碼會展開進行宏替換等操作,
正好在代碼中定義了一些宏變量和自定義類型,報錯卻出現在一個庫的頭文件里面==>>是由於自定義類型句末少了一個“;”,說明這一句和那個頭文件展開到一起了,導致了后者的錯誤。
typedef xxxx yyyy;
二、錯誤:error: expected ‘)’ before ‘{’ token (下面的if語句)
if (TIME_GAP < ABS(qt_length - rt_length) && q_start < q_end){ } 
        問題:需要補一個右括號,但是看if語句是沒有問題的,而真的補上右括號后編譯確實通過了,檢查后發現問題出現ABS函數上
#define ABS(x) ((x)>=0?(x):(-(x))    # 絕對值函數宏定義(錯誤) 
        ABS函數是宏定義函數,會在編譯時進行宏替換,由於該宏定義中最后少了一個右括號,進行替換后檢查發現少一一個,所以實際編譯的是
if (TIME_GAP < ((qt_length - rt_length)>=0?(qt_length - rt_length):(-(qt_length - rt_length)) && q_start < q_end){ }
其中的括號匹配情況是綠色背景顯示的,就算按提示加了右括號編譯通過,實際含義也遍歷
解決:更正ABS宏函數定義,給定義式補上右括號
