無法找到相關的答案,我的情況,所以我會盡力解釋我的情況:是否有檢查標誌和狀態的直觀方式?
我有以下代碼:
enum Flags {
OnlySpaces = 1 << 0,
valComment = 1 << 1,
valCommentBlock = 1 << 2,
valLabelName = 1 << 3,
valVariableName = 1 << 4,
valFunctionName = 1 << 5,
invSyntax = 1 << 32,
fInVarLab = valLabelName|valVariableName,
fInIdentifier = valLabelName|valVariableName|valFunctionName,
fInCommentBlock = OnlySpaces|valCommentBlock,
initState = OnlySpaces|fInIdentifier|valComment,
};
int lexStatus = initState;
for (int i = 0; sc.More(); sc.Forward(), i++) {
if (sc.atLineStart) {
if (lexStatus & fInCommentBlock != fInCommentBlock) // Here is the problem
sc.SetState(DEFAULT);
lexStatus = initState;
}
... // More code
}
我的代碼是詞法的文檔,我試圖做一個動作只有當我不在評論塊。問題是,上述說法正好返回,當我在評論我不是相反...
下面的語句正確地做這項工作,但似乎有悖常理,而:
if (lexStatus & fInCommentBlock == fInCommentBlock)
所以問題是:
- 爲什麼?爲什麼它完全與我所期待的完全相反?
由於運算符優先級if ((lexStatus & fInCommentBlock) != fInCommentBlock)
修復問題
- 我是接近正確的方法是什麼?
- 有沒有更好的方法?
- 有沒有辦法確保每個標誌都有獨特的價值?
最後一個問題,因爲某些原因lexStatus & fInCommentBlock
,因爲即使我不代碼的任何位置進行設置一些位的設置,因爲加...
預先感謝您的幫助!
剛纔if(lexStatus&fInCommentBlock)'有什麼問題? –
始終返回true ...: LexStatus = 10,fInCommentBlock = 118,LexStatus&fInCommentBlock = 2 – RaptorX
'fInCommentBlock == fInCommentBlock'總是會返回true,對不對? – evanmcdonnal