經常遇到對巨集的封裝是 !!(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 函式獲取乙...