c++ - __VA_ARGS__的 bool 参数获取错误是什么原因?
问题描述:
__VA_ARGS__的 bool 参数获取错误是什么原因? bool 类型输出应该是0或者1,但是为什么还会出现大于1的随机数呢?
//下列代码是抽取出来简化的代码。 #include <stdio.h> #include <stdarg.h> #define DEBUG(...) printf(__VA_ARGS__) int main () { bool ret; // 未初始化 //其它操作。 DEBUG("the result is : %d\n", ret); //输出有时候是大于1的随机数。如果对 ret 有其它赋值,但是它的类型是 bool,格式化输出怎么也应该是0或者1,是吧。 return 0; }
第 1 个答案:
它的类型是 bool,格式化输出怎么也应该是0或者1,是吧。
不是。没有初始化,没有赋值,就是随机值。
在 C++ 里,使用这种为初始化的值大部分情况时 undefined behavior ,就是说,什么都可能发生。参见标准:basic.indet
既然 printf 原型是:printf(const char * restrict format, ...);那为什么不能printf(format, va_ptr)这样用呢?#include <st ...