是否可以在 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
{
...
}
你好,我想知道是否可以在函数的参数中使用预处理器语言。
像这样:
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
{
...
}