關於巨集定義min和max的乙個坑

2021-09-19 16:48:33 字數 553 閱讀 6744

關於比較函式的兩種常用寫法

巨集定義:

#define max(a, b) (a > b ? a : b)
或者是algorithm自帶的max和min函式。

現在用algorithm的人比較多但也有不少人認為巨集定義快所以堅持用巨集定義。但事實上巨集定義確實快,但問題是這只限於簡單的變數比較。例如 比較兩個變數 a和b。一旦待比較引數包含函式的時候就很容易出現問題了。因為巨集定義在複雜呼叫下的行為是不可預期的,它的機制並不像函式呼叫那樣工作,只是簡單地提供引數的替換,結果是它的兩個引數值都被計算兩次,一次是在a和b的測試中,另一次是在巨集的返回值被計算期間,例如

所以還是乖乖用algorithm吧,或者確保比較引數為變數吧。

寫乙個MAX巨集定義(不使用大於,小於,和if)

請定義乙個巨集,比較兩個數a b的大小,不能使用大於 小於 if語句 思路很多 1 a b abs a b 2 就可以得到其中的大數了 用數學方法實現,不過其中用到了abs函式 此時將abs 函式也自己定義 int abs int x return x 31 1 x 1 x 注釋 x 31位,將符號...

乙個巨集定義的用法

巨集定義就是簡單的替換,之前沒見過帶符號的替換,看到這個有點懵了,記錄如下。這裡用 n,代替 fninfo n,l 用的很巧妙。define fninfo n,l n,measvalue measfntbl 以下為names.h中內容 fninfo dominmaxmidhilo,min fninf...

乙個複雜巨集定義的解讀

我們不提倡在寫 的時候出現太多複雜的巨集定義,巨集定義雖然可以簡化 量,但是讀起來非常費勁!下面來看乙個例子 把乙個buff中的資料拷貝到乙個指定的陣列中。由於種種原因,我們用巨集定義來實現這些負責的轉化。如下 include stdafx.h include string.h typedef un...