C 巨集的簡單用法

2021-10-11 21:42:42 字數 588 閱讀 2128

經常遇到對巨集的封裝是 !!(expr), expr就是函式指標,

但是為什麼要這麼寫呢,

因為我們只想獲取,true或false, 當expr 是乙個返回值 等於 100的值,經過轉換,獲取的結果為1 true,達到了想要的目的

通常配合 __builtin_expect(!!(expr), 1)使用,代表預設表示式執行通過的可能性更大,編譯器會做相關優化

同樣,有時我們也經常會用到#define rv (x + x) 的用法,為什麼要這樣呢,舉個例子

如果不加括號, 使用rv表示式展開的時候,會出現如下異常

rv(5) * rv(5)

實際 5 + 5*5 + 5 = 35

如果帶括號

則會(5 + 5) * (5 + 5) = 100

另乙個例子,巨集定義時,如果是比較複雜的表示式,那麼一般

會封裝成

#define function(a )do while(0)

為什麼要這麼封裝呢

請看以下**

if (true)

function(5)

else

此時會編譯失敗,因為else會找不到if語句

mysql的簡單用法 mysql簡單用法

刪除使用者 drop user jack drop比delete刪除的優勢在於drop可以刪除使用者的許可權,更加徹底 更改使用者名稱 rename user jack to jacknew 使用者的都存在與user表中,更改名稱,許可權不變 更改使用者密碼 update mysql.user se...

c 索引器的簡單用法

abstract class bird public abstract string getname class eagle bird public override string name set public override string getname public eagle eagle ...

C 中mutimap簡單用法

mutimap和map基本用法都是一樣的,map中鍵值對中的鍵是唯一的,而mutimap中的鍵可以重複。mutimap在現實中也是很常用的,比如部門和員工的關係。mutimap和map的標頭檔案都是,都是關聯容器,都是需要通過迭代器來訪問元素的,只不過在mutimap中需要使用count 函式獲取乙...