簡體   English   中英

在宏函數C ++中設置宏變量值

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM