我已經解決宏(這是一個微控制器,使訪問物理地址是OK),打破了這個(有條件定義的長序列後,屬性等):比較C宏
#define ADDR_A (*18)
#define ADDR_B (*30)
#define ADDR_C (*18)
我想對它們進行比較,所以我可以優化編譯:
#if ADDR_A==ADDR_C
return 1;
#else
return 0;
#endif
,但我得到「錯誤:運營商‘*’沒有左操作數」,這是有道理的。是否可以比較宏的定義。我有一種預感,我可以將它們轉換爲字符串來進行比較,但是我沒有找到一種方法(就像使用#作爲宏參數)。
不,我不想在運行時執行此操作,因爲我正在計算週期。
這是無效的C.編譯器應該如何知道它是一個地址和該對象的類型?你的問題的其餘部分不清楚。你想比較哪些doy,爲什麼?它聞起來像一個XY-問題。 – Olaf
我完全同意@Olaf。另外,如果表達式只有字面常量(如果要比較兩個存儲器映射寄存器的地址,那麼我所用的所有C編譯器都會優化一個普通的'if'語句;而且,由於您使用的是微控制器,因此無論如何您都應該啓用優化。換句話說,不需要依賴*預處理器*來優化相關的代碼;任何一半體面的C編譯器都可以爲你做(如果你使用正常的C if語句)。 –