我刚刚下载了MSVC2013RC,因为我听说它会比之前版本的MSVC更好地处理c标准。所以我刚刚下载并测试了一些我在Windows平台上真正需要的东西。
但是第一次测试已经让我失望了。
#include <stdlib.h>
#include <stdbool.h>
#include <stdio.h>
int testFunction(int iIn);
int main(int argc, char** argv)
{
int *TheKiddingBool;
TheKiddingBool= NULL;
TheKiddingBool= malloc(sizeof (int));
*TheKiddingBool= 17;
_Bool bWow;
bWow = true;
if (testFunction(*TheKiddingBool) == bWow)
{
printf("\r\nQAtest succesed!\r\n");
}
return 0;
}
int testFunction(int iIn)
{
return iIn;
}
testFunction(*TheKiddingBool) == bWow
的比较返回false。
这是MSVC13的C编译器中的一个相当难的错误吗?
或者我只是理解这一行
6.3.1.2布尔类型
§1当任何标量值转换为_Bool时,如果值比较相等,则结果为0 到0;否则,结果是1。
的c99 ISO / IEC 9899:TC3非常错误?
答案 0 :(得分:3)
根据7.18.3
<强>真强>
扩展为整数常量1
将您的比较设为if (17 == 1)
,返回false
。
答案 1 :(得分:2)
msam指向我
6.3.1.1 - _Bool的等级应小于所有其他标准整数类型的等级。
我抬头看看这个“排名”意味着什么,我想通了,这不是一个错误,我只是使用了错误的返回类型,因为标准说_Bool必须排名最低。
(再次感谢您的帮助)
答案 2 :(得分:1)
6.3.1.1 - _Bool的等级应小于所有其他标准整数类型的等级。
这意味着在执行算术比较时,_Bool
将被隐式转换为相应的整数类型。
请注意考虑
6.3将操作数值转换为兼容类型不会导致值或更改 表示。
和
6.2.5声明为_Bool类型的对象足以存储值0和1。
_Bool
必须具有比其他整数更低的排名,因为将8位整数转换为可能1位表示的bool将构成截断,并且值/表示的变化