是否可以在 c 函数的参数中使用#ifdef、#endif?

Is it possible to have #ifdef,#endif in functions's argument in c?

你好,我想知道是否可以在函数的参数中使用预处理器语言。

像这样:

static void OnTxData( 
#ifdef MODULE1
    TxParams_t* params
#else
    Tx2Params_t* params
#endif
                       )
{
...
}

是的。您可以在任何地方直接使用这些(只要它们在自己的行上)。预处理器“解决这些问题”编译器的其余部分编译任何东西之前。

因此,如果定义了 MODULE1,那么这是被编译的代码:

static void OnTxData( 
    TxParams_t* params
                       )
{
...
}

如果它没有定义,那么这是被编译的代码:

static void OnTxData( 
    Tx2Params_t* params
                       )
{
...
}

而不是难以阅读:

static void OnTxData( 
#ifdef MODULE1
    TxParams_t* params
#else
    Tx2Params_t* params
#endif
                       )
{
...
}

#ifdef MODULE1
    #define TX_Params TxParams_t
#else
    #define TX_Params Tx2Params_t
#endif

static void OnTxData( TX_Params *prams)
{
...
}

#ifdef MODULE1
    typedef TxParams_t TX_Params
#else
    typedef Tx2Params_t TX_Params
#endif

static void OnTxData( TX_Params *prams)
{
...
}

或(IMO 更糟)

#ifdef MODULE1
static void OnTxData( TxParams_t *prams)
#else
static void OnTxData( Tx2Params_t *prams)
#endif
{
...
}