MSVC13RC仍然不遵守C标准?

时间:2013-09-16 12:32:16

标签: c visual-studio

我刚刚下载了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非常错误?

3 个答案:

答案 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将构成截断,并且值/表示的变化