如果使用Visual-C ++或gnu g ++编译,此函数会产生不同的结果

时间:2012-12-23 12:32:14

标签: visual-c++ g++

以下函数(从.cpp文件中提取)给出两个不同的结果(即输出缓冲区int_image不同)如果在带有Visual Studio的PC上运行(cpu Intel i7运行Windows 7)或在我的Android手机上(P880)。 im1类型的两个输入缓冲区im2int8char的同义词)完全相同(已选中),以及参数{{1 }和w。我不明白为什么会这样:

h

请注意。 char图像im1和im2的大小可能会发生整数溢出(但我认为这种情况由两个编译器同等处理,但此时我不太确定)。

1 个答案:

答案 0 :(得分:2)

找到错误来源。我将int8定义为char,认为默认情况下它是一个签名字符。相反,它在gcc上是无符号的,而在Visual C ++上签名。我不知道标准说的是什么,但我建议所有程序员在为signed charunsigned char定义自己的宏时明确使用int8uint8Interesting discussion about this on stackoverflow.