为什么 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)))
我会直接忽略它...
如果它困扰您,请向供应商报告:帮助 → 发送反馈 → 报告问题。 ..
一切都按预期工作,我从 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)))
我会直接忽略它...
如果它困扰您,请向供应商报告:帮助 → 发送反馈 → 报告问题。 ..