在为多个平台编译时,您将惨遭失败,因为 C++ 标准没有定义char
为具有某种“签名”。
因此 GCC 引入了强制某些行为的选项-fsigned-char
。例如,-funsigned-char
可以在此处找到有关该主题的更多信息。
编辑:
正如您询问损坏代码的示例一样,有很多可能会破坏处理二进制数据的代码。例如,您处理 8 位音频样本(范围 -128 到 127)的图像,并且您希望将音量减半。现在想象这个场景(天真的程序员假设char == signed char
):
char sampleIn;
// If the sample is -1 (= almost silent), and the compiler treats char as unsigned,
// then the value of 'sampleIn' will be 255
read_one_byte_sample(&sampleIn);
// Ok, halven the volume. The value will be 127!
char sampleOut = sampleOut / 2;
// And write the processed sample to the output file, for example.
// (unsigned char)127 has the exact same bit pattern as (signed char)127,
// so this will write a sample with the loudest volume!!
write_one_byte_sample_to_output_file(&sampleOut);
我希望你喜欢这个例子 ;-) 但老实说,我从来没有真正遇到过这样的问题,即使是在我记忆中的初学者......
希望这个答案足以满足您的反对意见。简短的评论呢?