gpt4 book ai didi

c++ - VSCode 错误 : "incorrect use of va_start"

转载 作者:行者123 更新时间:2023-11-30 05:03:47 25 4
gpt4 key购买 nike

VSCode 提示在以下当前工作 函数中使用 va_start

void _log(int level, const char *format, ...)
{
va_list arglist;
va_start(arglist, format);
writelog(level, format, arglist);
}

四处搜索后,我发现了对标准的引用,它似乎表明 VSCode 是正确的,并且该代码将导致未定义的行为。

18.10/3 ...The parameter parmN is the identifier of the rightmost parameter in the variable parameter list of the function definition (the one just before the ...). If the parameter parmN is declared with a function, array, or reference type, or with a type that is not compatible with the type that results when passing an argument for which there is no parameter, the behavior is undefined.

我试图找到其他人如何处理类似功能的例子。我找到了几个博客和几个代码示例来重新创建 printf,使用与上述类似的实现。这些例子也是不正确的吗?

在不导致未定义行为的情况下,编写类 printf 函数的合适方法是什么?

最佳答案

所以我也遇到了这个问题,这让我在处理构建输出时感到困惑。我相信这是一个错误(我在这里注册了一个:https://github.com/Microsoft/vscode-cpptools/issues/1720)。

我发现为 __INTELLISENSE__ 构建使用特殊的预处理器逻辑可能会很糟糕(如果平台本身不支持 Intellisense,则这是必需的,但 vscode 是跨平台的,所以......)。

解决方法如下:

#if __INTELLISENSE__
#undef va_start(arg, va)
#define va_start(arg, va)
#undef va_end(va)
#define va_end(va)
#undef va_copy(va0, va1)
#define va_copy(arg0, va1)
#define __INT_MAX__ 0x7fffffff
#endif

我对 __INT_MAX__ 的定义也有疑问。

如果您不顾一切,这将解决这些错误。

希望有人能找到一个实际的解决方案,或者至少是一个不需要自定义代码的解决方案。

谢谢,阿德里安

关于c++ - VSCode 错误 : "incorrect use of va_start",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49288611/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com