Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C VS2013关于使用_Bool的编译问题_C_Visual Studio_Boolean_C99 - Fatal编程技术网

C VS2013关于使用_Bool的编译问题

C VS2013关于使用_Bool的编译问题,c,visual-studio,boolean,c99,C,Visual Studio,Boolean,C99,我正在VS2013中编译以下代码: #if (__STDC_VERSION__ >= 199901L) /* Inactive pre-processor block */ #else /* Active pre-processor block */ #ifndef __bool_true_false_are_defined typedef unsigned char _Bool; #define bool _Bool #define false (0) #define true (

我正在VS2013中编译以下代码:

#if (__STDC_VERSION__ >= 199901L)
/* Inactive pre-processor block */
#else
/* Active pre-processor block */
#ifndef __bool_true_false_are_defined
typedef unsigned char _Bool;

#define bool  _Bool
#define false (0)
#define true  (1)
#define __bool_true_false_are_defined (1)

#endif /* __bool_true_false_are_defined */
#endif
我的目标如下

  • 如果编译器支持C99,则不要创建
    \u Bool
    类型,因为它已内置
  • 如果编译器不支持C99,则创建一个自定义的
    \u Bool
    类型
我的观察结果是,代码进入
#else
块(不支持C99),但编译器仍然抱怨
错误C2632:“char”后跟“bool”是非法的

以下是我对上述逻辑的几个问题

  • 预处理器检查C99支持是否正确
  • 如果(1)的答案是肯定的,那么为什么C99代码块在VS2013中不保持非活动状态。我假设VS2013支持C99
  • 如果VS2013中没有C99支持,那么为什么编译器会抱怨
    \u Bool

  • 看起来他们已经用另一种方式定义了它,
    \u Bool
    扩展到
    Bool
    。或者另外测试一下

    #if defined(_Bool) || defined(bool)
    ..
    #endif
    

    我没有安装VS2013,但2012仍然支持C89(又名ansi C);我想2013年也是如此。你的代码为我编译。你能提供一个完整(但简短)的示例程序来演示你的错误吗?@BLUEPIXY,根据C2632,它表明
    bool
    已被设置为正确的类型(但不确定从哪个版本VS进行了更改)。这是否意味着VS2013中不支持C99,但有一些自定义设置可以为其创建适当的类型_Bool@simonc,我正在.c文件中添加代码。上面是我试图编译的所有测试代码片段。VS 2013包括_Bool。我的猜测是,他们可能没有撞上STDC_版本,因为支持不完整。