【发布时间】:2014-05-17 01:20:52
【问题描述】:
我正在 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,则不要创建
_Bool类型,因为它已经内置。 - 如果编译器不支持 C99,则创建自定义
_Bool类型。
我的观察是代码进入了#else 块(不支持C99),但编译器仍然抱怨error C2632: 'char' followed by 'bool' is illegal
以下是我对上述逻辑的几个问题
- C99 支持的预处理器检查是否正确?
- 如果对 (1) 的回答是肯定的,那么为什么 C99 代码块在 VS2013 中不保持非活动状态。我假设 VS2013 支持 C99。
- 如果VS2013没有C99支持,那为什么编译器报错
_Bool的typedef
【问题讨论】:
-
我没有安装 VS2013 但 2012 仍然支持 C89(又名 ansi C);我想2013年是一样的。你的代码为我编译。您能否提供一个完整(但简短)的示例程序来演示您的错误?
-
@BLUEPIXY,根据 C2632,它表明
bool已被设为正确的类型(但不确定,从哪个版本的 VS 进行了更改)。这是否意味着 VS2013 中不存在 C99 支持,但是有一些自定义设置可以为 _Bool 创建正确的类型 -
@simonc,我在 .c 文件中添加代码。以上是我正在尝试编译的所有测试代码sn-p。
-
VS 2013 implemented a number of C99 features 包括_Bool。我的猜测是他们可能没有碰到 STDC_VERSION 因为支持不完整。
标签: c visual-studio boolean c99