0

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

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

我希望traplog参数是可选的。

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

4

2 回答 2

5

VA 列表不好的原因有很多,最明显的是它们的类型安全性很差。避开他们。

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

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

并记录trapLog == NULL它是否不会被使用。

于 2013-04-16T06:40:56.090 回答
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)
}
于 2013-04-16T07:32:32.477 回答