VSCode 错误: "incorrect use of va_start"
VSCode Error: "incorrect use of va_start"
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…参数parmN是函数定义的变量参数列表中最右边参数的标识符(就在…之前的那个)。如果参数parmN是用函数、数组或引用类型声明的,或者是用与传递没有参数的参数时产生的类型不兼容的类型声明的,行为是未定义的。
我试图找到其他人如何处理类似功能的例子。我发现了几个博客和几个重新创建printf
的代码示例,使用了与上面类似的实现。这些例子也不正确吗?
在不产生未定义行为的情况下编写类似printf
的函数的合适方法是什么
所以我也遇到了这个问题,它在处理构建输出时让我感到困惑。我相信这是一个bug(我在这里注册了一个: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__
的定义也有意见。
如果你绝望了,这将消除这些错误。
希望有人能想出一个实际的解决方案,或者至少一个不需要自定义代码的解决方案。
谢谢,Adrian
我知道这是一个5年前的问题,这个回答只针对将来遇到这个问题的人。我在发布btw.时使用的是最新版本的VS代码
该问题可能是由c_cpp_properties中的错误设置引起的,如果您的项目中没有设置,那么它将使用默认设置。您需要将compilerPath和intelliSenseMode设置为gcc,而不是clang。
{
"configurations": [
{
"name": "Linux",
"includePath": [
"${workspaceFolder}/**"
],
"defines": [
],
"compilerPath": "/usr/bin/gcc",
"cStandard": "c17",
"cppStandard": "c++14",
"intelliSenseMode": "linux-gcc-x64",
"configurationProvider": "ms-vscode.makefile-tools"
}
],
"version": 4
}
- 在Google Kick start中提交时出错
- "Unable to start debugging. No process is associated with this object." - 在Visual Studio Code中使用GDB
- C++生成文件错误"implicit entry/start for main executable"
- Valgrind 在 QThread::start() 上报告内存泄漏
- 为什么我不能调用 QMetaObject::invokeMethod(&threadObj, &QThread::start, Qt::QueuedConnection)?
- 如何将IEnumerable与Process.Start的输出事件处理程序一起使用?
- QThread start() return value
- 在Qt中获取输出:'QProcess::start()'和'QProcess:readAllStandardOutPut()'
- Android CMake "致命错误: 'bits/libc-header-start.h' 文件未找到"
- 仅在一台计算机上出现"0xc000007b Application Unable to Start Correctly"错误
- QCamera::start给出神秘的"failed to start"日志消息
- 如何设置Visual Studio来调试DLL ("Unable to start program error")
- 一个粒子太多:GL_INVALID_VALUE生成错误。<start> 不满足着色器存储缓冲区的最低对齐要求
- 解析器名称定义为默认值:%start 后"parse"警告野牛
- 将类方法作为 pthread start 函数传递
- 等待多个线程启动,start() 未捕获
- 为什么"Start Debugging"比VC2010中的"attach to process"慢得多?
- 给定 myvector.start() 和 myvector.end(),我想在不复制数据的情况下创建 myvector
- C# DLL 导入失败:"The application has failed to start because its side-by-side configuration is incorrect
- 为什么两个"Start (Without) Debugging"(F5 和 Ctrl+F5)都不创建 CppUnit *.xml 报告文件?