我以前写过这样的宏替换代码:
1 2 |
|
在每个变量外都加了括号以后,使用起来确实没碰到过什么问题。可是作者这样使用 这个函数:
1 2 3 4 |
|
问:问题产生原因?解决方案?
黄舟2017-04-17 13:06:46
首先,你要明白,define就是進行簡單的替換,這是第一點,基於此,我們就將你提供的兩個表達式使用巨集來進行替換,然後你就會明白了。
1 2 3 |
|
你再把值填進去計算,你就應該明白了。
先判斷a是否大於b,此時會進行一次++運算運算;當a大於b時,會傳回++a表達式,會再進行一次++運算;我說的比較繞,我想你應該懂我的意思。
解決方案就是,不要在巨集中使用會改變自己值的運算符,例如++,--等,這樣會讓你很暈的。
天蓬老师2017-04-17 13:06:46
http://www.cnblogs.com/safeking/archive/2008/03/21/1116302.html
去掉副作用的最小巨集定義方式(linux kernel定義)
1 2 |
|
迷茫2017-04-17 13:06:46
@brayden 的方法是沒有用的,因為這不是標準C/C++的語法
我不知道你為什麼一定要用宏,因為你說你用的是C++,顯然應該用模板函數來解決這個問題:
1 2 3 4 5 |
|
當然了,C++早就考慮過這個問題了,所以你有std::max可以用。