使用define(X)

时间:2019-05-08 15:15:00

标签: c++ c-preprocessor

这里是我要使用的宏,如果定义了X_DEFINED,它将被评估为DEFAULT_X,否则它将被评估为x

#define GET_X(x) (defined(X_DEFINED) ? DEFAULT_X : x)

它无法编译,并显示错误

error: 'X_DEFINED' was not declared in this scope

有什么建议吗?我希望能够根据是否定义了X_DEFINED在参数和全局变量之间进行选择

3 个答案:

答案 0 :(得分:10)

ui <- dashboardPage( dashboardHeader(title="Our Plots"), dashboardSidebar(), dashboardBody( fluidRow(column(width=6,height=12, box(leafletOutput("myMap",height="400px"),title="Da MF Map",status = "warning", solidHeader = TRUE, collapsible = TRUE)), column(width=6,height=12, box(plotOutput("plot2",height=400))) ) , fluidRow(column(width =12, height = 12, box(plotOutput("plot1",height=400)))), # plotOutput("plot1") fluidRow(column(width =12, height = 12, box(plotOutput("plot3",height=400))) ) ) ) 仅适用于defined()和类似的预处理程序指令。

您想要这样的东西:

#if

答案 1 :(得分:2)

您需要定义2个不同的宏,具体取决于是否定义了X_DEFINED

#ifdef X_DEFINED
#   define GET_X(x) x
#else
#   define GET_X(x) DEFAULT_X
#endif

答案 2 :(得分:1)

草率地说,您正在将运行时内容(三元运算符的评估)与甚至在编译(预处理器)之前发生的内容混合在一起。您可以改用#ifdef

#ifdef X_DEFINED
    #define GET_X(x) DEFAULT_X
#else
    #define GET_X(x) x
#endif