首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么va_arg(va_list,type)给我一个C6285警告?

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

Stack Overflow用户
提问于 2020-06-18 10:41:10
回答 1查看 214关注 0票数 1

一切都按预期工作,我从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?

示例代码:

代码语言:javascript
复制
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);
}

为什么我要收到这个警告,我怎么才能摆脱它?

我使用VisualStudioCommunity2019和VisualC++ 2019

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-06-18 11:10:08

C6###错误码是IntelliSense码。这些是基于启发式的,目的是提醒人们注意潜在的错误,但也可能导致错误,这似乎就是这里的情况;它可能触发了CRT中的va_arg实现:

代码语言:javascript
复制
#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)))

我只会忽略它..。

如果它困扰你,向供应商报告:帮助→发送反馈→报告一个问题.

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62448092

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档