我正在使用一些旧代码(碰巧是文本游戏)并想替换模式
strcasecmp(variable, "something") == 0 || strcasecmp(variable, "something else") == 0
有更好的东西,比如
in_list(variable, "something", "something else")
我认为可变参数函数是合适的。但是当我查看联机帮助页时,我发现无法判断您何时用完了参数(va_arg
在导致未定义行为时调用)。那么我该如何处理呢?
也许有一些方法可以绕过这个限制。也许我可以#define
在列表末尾添加某种哨兵,以便我可以检查它,尽管它看起来不优雅。我想我可以将其替换为具有 1、2、... 参数的宏系列,直到某个合理的限制,尽管这感觉像是一个 hack。
这样做的正确方法是什么?假设我不愿意重写程序以使用该string
类型并且我坚持使用char*
s。