#define a b c 如果使用a將會替換成b c,使用a b會得到b c b
#define a (b c)如果使用a將會替換成(b c)
注意上面加括號與不加是完全不同的,特別是在定義函式和函式指標的時候。下面例子:
上面這行**展開應該是這樣的:
這是在定義函式指標!而不是在定義函式!
但是如果把括號去掉變成:
展開巨集就變成了:
這只是在定義函式而已。
使用第二種情況將不可能通過編譯(會導致鏈結錯誤)。
比如這個例子:
這是可以通過編譯的;
根本無法通過編譯!無法解析外部符號。
所以動態鏈結庫的使用只能使用函式指標來引用乙個來自於動態庫匯出的函式(對這個到處函式做強制型別轉換然後賦值給函式指標)
在巨集中可以使用#來快速將名稱轉化成字串。
如:
巨集定義的注意事項
巨集定義不是函式,它只是不同形式的替換而已,不同於函式的引數巨集定義的引數 暫且稱之為引數 不是作為乙個整體參與計算的,如下例子所示 include using namespace std define fun1 x x x define fun2 x x x int fun3 int x int ...
巨集函式的注意事項
巨集定義注意事項 1.巨集函式的引數沒有型別,預處理器只負責做形式上的替換,而不做引數型別檢查,所以傳參時要格外小心。2.巨集函式定義要注意格式,尤其是括號,否則易出現優先順序錯誤。3.巨集函式往往會導致較低的 執行效率,甚至導致預料外的結果。比如 define min a,b a b a b ch...
java DOM 注意事項
1.w3c把標籤內的文字部分也定義成乙個node 2.element物件代表的是xml文件中的標籤元素 繼承於node,亦是node的最主要的子物件 3.attr實際上是包含在element中的,它並不能被看作是element的子物件,因而在dom中attr並不是dom樹的一部分,所以node中的 ...