为什么cout不打印extern"C"变量?

gca*_*dal 0 c c++ solaris extern sunstudio

请考虑以下代码:

extern "C" {
    #include <lib.h>
}

#include <iostream>

int main() {

    unsigned char a='a';
    unsigned char b=some_struct_in_libh->unsignedchar;

    cout << a << " " << b << endl; //Prints only a

    printf("%u\n",b); //Prints b

    cout << static_cast<int>(b) << endl; //Also prints b

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

为什么它会像这样?

Mar*_*k B 6

它根本不打印a.你所看到的是将cout字符类型数据打印为字符而不是数字.您b的某些字符是不可打印的,因此cout有助于将其打印为空白区域.

您通过将其转换为int找到了解决方案.

编辑:我很确定你的printf只是偶然工作,因为你告诉它期望一个unsigned int并给它一个字符(不同的字节数).

  • printf有效,因为在变量参数函数的情况下,所有类型的"整数类型"都会转换为"int",除非它们更大.所以代码完全没问题 - 但是当然,它打印了char的无符号值,而不是在这个答案中正确解决的字符本身. (3认同)