色婷婷狠狠18禁久久YY,CHINESE性内射高清国产,国产女人18毛片水真多1,国产AV在线观看

C語言的一些宏后面會加零,definen+0,為什么要加零呢?有什么意義?

錢艷冰2年前19瀏覽0評論

謝邀。

在閱讀Linux內核源碼時,發現了兩個宏,相關的C語言代碼如下,請看:

這兩個宏接收一個結構體參數,該結構體的C語言定義如下:

這兩個宏可以提供“原子操作”級的讀數據操作。一開始看到這個宏的時候,我搞不懂為何要在最后“+0”,不過仔細想想,這么做至少有兩個好處。

避免被當作“左值”

首先,在atomic_read()宏定義后“+0”可以避免atomic_read()宏被當作“左值”。根據改宏的名字,應該能夠知道它是“原子的”讀取,而一個被讀取的數據再做“左值”顯然是不合適的,如果沒有后面的“+0”,下面這樣誤寫的C語言代碼,編譯器是不會報錯的:

當然,也可以使用下面這樣的宏定義避免atomic_read()宏被當作左值:

即加上一個“正號”,不過這么做顯然沒有在后面“+0”好,相信讀者應該明白,這里就不贅述了。

避免命名重復

按照C語言標準,一個宏只要名字一樣,參數類型一樣,邏輯一樣,出現重復的宏定義時完全沒有問題的,不過出現重復代碼對維護來說是一件很不好的事。在宏后面“+0”的另外一個好處就是可以盡可能的避免重復的宏定義。請看:

在C語言程序中如果無意使用了相同的宏名字,并且相同的宏會被同一環境調用,如果兩個宏連功能代碼也相同,編譯器不做報錯處理,以后就需要維護相同的多份C語言代碼了。+0可以在一定程度上避免這種情況的發生。