[英]Setting macro-variable-value in macro-function C++
我需要調用一個函數,該函數調用宏函數以在運行時更改宏值。
此代碼未編譯:
#define MY_MACRO 32
#define SET_MY_MACRO_VAL(IS_TRUE)(MY_MACRO=(IS_TRUE)?16:U32)
在功能SET_MY_MACRO_VAL
> error: lvalue required as left operand of assignment
#define SET_MY_MACRO_VAL(IS_TRUE)(MY_MACRO=(IS_TRUE)?16:U32)
^
in expansion of macro 'SET_MY_MACRO_VAL'
SET_MY_MACRO_VAL(True);
^
宏值在編譯之前被預處理器替換,並且在運行時不存在。
它不是變量,它只是使用文本作為值“ 32”的一種方式。
如果您這樣做:
#define MY_MACRO 32
#define SET_MY_MACRO_VAL(IS_TRUE)(MY_MACRO=(IS_TRUE)?16:U32)
它將擴展到這個
#define MY_MACRO 32
#define SET_MY_MACRO_VAL(IS_TRUE)(32=(IS_TRUE)?16:U32)
您可以使用#define
#ifdef SET_MACRO_VAL_32
#define MY_MACRO 32
#else
#define MY_MACRO 16
#endif
或使用條件宏
#if (IS_TRUE>0)
#define MY_MACRO 32
#else
#define MY_MACRO 16
#endif
編輯:在C ++中,雖然您實際上不需要宏。 您可以使用模板和/或constexpr變量作為編譯時值。 在C ++ 17中,如果甚至可以使用constexpr if
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.