C++宏定義及相關問題


一、遇到錯誤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宏函數定義,給定義式補上右括號

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM