繁体   English   中英

为什么 va_arg(va_list, type) 给我一个 C6285 警告?

[英]Why does va_arg(va_list, type) give me a C6285 warning?

一切都按预期工作,我从 va_arg(va_list, type) 获得了我需要的值,但是在我调用 va_arg 的任何地方都会收到这个警告:

Warning C6285 (<non-zero constant> || <non-zero constant>) is always a non-zero constant. Did you intend to use the bitwise-and operator?

示例代码:

void Logger::log(LogLevel level, const char* location, uint32_t line, const char* format, ...)
{
    va_list arg_ptr;
    va_start(arg_ptr, format);

    while (*format) {
        // ...
        if (*format == 'd') { // 
            int i = va_arg(arg_ptr, int); // <-- Warning is reported here
            // ...
        }
        // ...
        ++format;
    }
    // ...
    va_end(arg_ptr);
}

为什么我会收到此警告,我该如何摆脱它?

我正在使用 Visual Studio Community 2019 和 Visual C++ 2019

C6###错误代码是 IntelliSense 代码。 这些是基于启发式的,旨在将注意力集中在潜在的错误上,但也可能导致误报,这里似乎就是这种情况; 它可能触发了 CRT 中的va_arg实现:

#define __crt_va_arg(ap, t)                                               \
    ((sizeof(t) > sizeof(__int64) || (sizeof(t) & (sizeof(t) - 1)) != 0) \  // <== Here
        ? **(t**)((ap += sizeof(__int64)) - sizeof(__int64))             \
        :  *(t* )((ap += sizeof(__int64)) - sizeof(__int64)))

我会直接忽略它...

如果它困扰您,请向供应商报告:帮助发送反馈报告问题...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM