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 ...