我有一种情况,我希望函数的一个参数是可选的。我想知道如何实现它??
int mapgw_cm_trace(int trapLog, char *pcMsgId, ...)
我希望 traplog 参数是可选的。
或者另外看这个是,如果在函数调用中没有发送此参数,我将此参数设置为默认值(比如1),否则使用函数调用中发送的vaLue。是否有可能实现这一目标..?我不想使用 va_args()
答案 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)
}