【问题标题】:Why is 'bool' keyword syntax highlighted in Xcode configured for C89?为什么在为 C89 配置的 Xcode 中突出显示“bool”关键字语法?
【发布时间】:2020-02-27 15:56:11
【问题描述】:

我读到 C 中的布尔值首先来自 C99。现在我想知道为什么 bool 仍然会被 Xcode 的语法高亮或你所称的着色...
当在 Xcode 的构建设置中搜索“拨号”时,会弹出“语言方言”,然后我“拨入”C89 标准,但 bool 仍然会被着色。

这是为什么呢?

我也读到了这个:
Using boolean values in C

我知道他们是如何做到的,但我也不明白示例 3 和 4 的工作原理......

Option 3
typedef int bool;
enum { false, true };

Option 4
typedef int bool;
#define true 1
#define false 0

注意:我不明白typedef int bool; 怎么会与enum { false, true }; 线路相连。

为什么带有 C89 的 xcode 不忽略 bool 关键字?
这些示例是如何工作的?

【问题讨论】:

  • 我认为 Xcode 的语法高亮可能只是没有注意“语言方言”设置。您的“选项 3”和“选项 4”是否在 C89 模式下编译?他们应该,只要你不#include <stdbool.h>
  • Xcode 是 IDE 而不是编译器。它有自己的规则。
  • 另外,您应该知道即使在最新版本的 C 标准中,booltruefalse 也是 not 关键字。 C99 添加了一个真正的布尔 type 和关键字 _Bool,但定义 booltruefalse 的程序在 C99 和更高版本中仍然有效(同样,如只要它们不包括stdbool.h)。这是与 C++ 的有意区别。
  • 嘿!我没有尝试选项 3 和 4,因为我不明白“ typedef int bool; ”无论如何可以与“ enum { false, true }; ”行连接
  • @Nickname 如果我告诉您enum 声明定义的常量具有int 类型,这有帮助吗?

标签: c xcode boolean c89


【解决方案1】:

语法高亮是XCode 使用的近似值;不保证遵循任何标准。并不是说syntax highlighting in XCode 不够先进,但是如果不针对特定标准进行编译,就很难实时判断这些符号的确切含义。

在选项 3 的情况下,它执行从匿名 enumintimplicit conversion。由于它们是兼容的类型,因此它“始终是无操作且不会更改表示形式”。 { false, true }default enum 值是 { 0, 1 },因此这应该会产生相同的汇编器输出。这个答案has the order of preference 当一个人不知道该选什么时。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-10
    相关资源
    最近更新 更多