3 回答

TA貢獻1784條經驗 獲得超2個贊
你確定是這樣定義的!??!
要加續行符吧!
應該是這個樣子才對。
#define READ_FIXED(results,keyName) \
{ \
nResult= configfile.readint(-T("fixedCursor"),keyName,ERROR_VAL) \
if(0<nResult&&nResult<m_warrle&&NULL!=m_pcursor[nResult]) \
{ \
results = nResult; \
} \
else \
{ \
results = 0 \
} \
\
}
預編譯語句只能定義在同一行,可是同一行寫不下許多代碼,于是續行符 \ 就派上了用場了。
加上續行符\,預編譯器就認為,所有代碼都在同一行上了,就把許多行,當作一個完整的宏定義了。
PS:空行也看作一行,也必須有續行符\。
C:標準庫的很多函數,都有可能是宏定義。
這是把帶參的宏,看作函數使用了。

TA貢獻1847條經驗 獲得超11個贊
#define沒什么特別的,就是指定某個字符串由新的名稱來替代。
比如#define A "abcdef"
如果你程序中使用A如下
char str[] = A;
預處理階段,預處理器會替換A為"abcdef"
所以當預處理結束,由編譯器編譯的時候,得到的實際代碼是
char str[] = "abcedf";
同理,如果int m = A;就會報錯,因為替換后為int m = "abcedf";這很明顯語法錯誤。
回到你的問題來看
#define READ_FIXED(results,keyName)
{
nResult= configfile.readint(-T("fixedCursor"),keyName,ERROR_VAL)
if(0<nResult&&nResult<m_warrle&&NULL!=m_pcursor[nResult])
{
results = nResult;
}
else
{
results = 0
}
}
這樣應該不能通過的,因為,#define 后面的內容必須要在同一行。
所以我覺得你的程序應該有\來把下一行連接到這一行:
#define READ_FIXED(results,keyName)\
{\
nResult= configfile.readint(-T("fixedCursor"),keyName,ERROR_VAL)\
if(0<nResult&&nResult<m_warrle&&NULL!=m_pcursor[nResult])\
{\
results = nResult;\
}\
else\
{\
results = 0\
}\
}
使用時就是是字符串替換的操作而已。
READ_FIXED(m_arrfixedCursor[1],-T("common"))這句就是把results替換為
m_arrfixedCursor[1],-T("common")替換掉keyName,復制{\
nResult= configfile.readint(-T("fixedCursor"),keyName,ERROR_VAL)\
if(0<nResult&&nResult<m_warrle&&NULL!=m_pcursor[nResult])\
{\
results = nResult;\
}\
else\
{\
results = 0\
}\
}替換READ_FIXED(m_arrfixedCursor[1],-T("common"))
- 3 回答
- 0 關注
- 170 瀏覽
添加回答
舉報