我想了解如何按位運算由C/C++編譯器處理。 具體來說,我說的是用gcc編譯的C,但我相信這個問題比這個更普遍一些。在C/C++編譯時按位運算
無論如何,假設我有一個定義的宏如下:
#define SOME_CONSTANT 0x111UL
#define SOME_OFFSET 2
#define SOME_MASK 7
#define SOME_VALUE ((SOME_CONSTANT) << (SOME_OFFSET)) & (SOME_MASK)
static inline void foo() { printf("Value: %lu#n", SOME_VALUE); }
所有SOME_VALUE的成分是常數,它們是在編譯時已知的所有。
所以我的問題是:gcc會在編譯時評估SOME_VALUE,還是隻會在運行時完成? 如何檢查gcc是否支持這種優化?
看看彙編語言輸出(在gcc中有命令行選項 - '-S')。預處理器應該替換文本,因此編譯器是否優化了剩餘的內容。這應該。 – sje397 2015-04-02 07:59:49
這被稱爲「常量摺疊」,您可以確信任何現代編譯器都會在編譯時執行此操作。 – Sneftel 2015-04-02 08:00:14
你可能想閱讀§6。6(「常量表達式」)在ISO/IEC 9899:1999中解決了這個問題。或者[此概述](http://en.cppreference.com/w/c/language/constant_expression)。 – 2015-04-02 08:11:37