我踩中了 MACRO 的 Pitfall

      雖然自己的 Blog 中有一篇關於“宏陷阱”的文章,可是在最近的工作中自己卻沒有意識到這個常規的宏“陷阱”,自己中招了。

      hr = HRESULT_FROM_WIN32(foo())  就是這條語句給我們鋪設了陷阱

這個宏的定義:

    ((HRESULT)(x) <= 0 ? ((HRESULT)(x))   : ((HRESULT) (((x) & 0x0000FFFF) | (FACILITY_WIN32 << 16) | 0x80000000)))

在這裏 foo())  被替換兩次,從而就被調用兩次導致了錯誤。這正是常規的 :Duplication of Side Effects 陷阱。

 

這個問題是被別人發現的,然後反饋到我們這裏。而之前我們還一直以爲是別人的錯誤,現在感覺真是不應該發生這種錯誤,真的沒面子。以後真的要小心啊!提醒大家用宏的時候一定要小心!以免中招。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章