如何在C函数中使某些参数可选

时间:2013-04-16 06:34:18

标签: c parameters default-value

我有一种情况,我希望函数的一个参数是可选的。我想知道如何实现它??

    int mapgw_cm_trace(int trapLog, char *pcMsgId, ...)

我希望 traplog 参数是可选的。

或者另外看这个是,如果在函数调用中没有发送此参数,我将此参数设置为默认值(比如1),否则使用函数调用中发送的vaLue。是否有可能实现这一目标..?我不想使用 va_args()

2 个答案:

答案 0 :(得分:5)

VA列表由于多种原因而不好,最明显的是它们的类型安全性较差。避免它们。

在C中执行此操作的常用方法是记录函数,并说如果trapLog具有此值或那么值,则不会使用它。如果它可能有任何值,那么你可以将函数重写为:

int mapgw_cm_trace (const int* trapLog, char *pcMsgId)

并记录如果trapLog == NULL将不会使用它。

答案 1 :(得分:0)

除了可选参数的语言功能(因为它们希望你将这些参数放在最后,因此在这里不起作用),总是有可能编写另一个函数。

int mapgw_cm_trace(int trapLog, char *pcMsgId)

int mapgw_cm_trace_with_default_traplog(char *pcMsgId)
{
    // put your default as first parameter
    return mapgw_cm_trace(0, pcMsgId)
}