【问题标题】:Why does Microsoft define a type CHAR as char and a macro CONST as const? [duplicate]为什么微软将 CHAR 类型定义为 char,将宏 CONST 定义为 const? [复制]
【发布时间】:2015-03-13 00:38:43
【问题描述】:

作为一个 C 初学者,翻阅 MSDN's Windows Data Types,我发现有很多定义的类型似乎是多余的。

例如使用typedef:

  • CHAR -- typedef char CHAR;
  • 浮动 -- typedef float FLOAT;

也可以作为对象宏:

  • 常量 -- #define CONST const

据我了解,typedef 和 #define 通常用于阐明程序员的意图:

#define BOOL int

和/或缩短类型声明(想不出一个好的例子):

typedef unsigned char BYTE;

但是我不明白简单地将 char 替换为 CHAR 会有什么好处。

那么微软为什么要定义这些类型呢?

【问题讨论】:

  • 因为... 微软
  • 开玩笑,我怀疑一定有历史原因
  • @bolov 是的,看起来是这样,上面的副本有一些很好的答案。
  • 这是微软将winapi与C编译器实现隔离的基本方式。 30 年前使用这些 typedef 编写的程序,针对 16 位 8086 处理器,今天仍然可以在 64 位 Haswell 处理器上编译和运行。

标签: c windows types macros


【解决方案1】:

这是一个猜测,没有任何研究证实。

语言中的基本类型都有小写类型。该标准将来可能会开始使用byte 作为类型,但不太可能使用BYTE 作为类型。 Microsoft 选择使用typedef 和#define 创建几种类型,这对他们来说是有意义的,并且对某些人来说更容易为他们的平台编程。他们还确保他们的类型不会与未来可能使用的标准相冲突。

如果你使用BYTE作为类型,你不是更愿意使用CHAR作为类型而不是char吗?

【讨论】:

  • 这是一个有趣的理论,我认为它可能有些道理。实际上有一些很好的答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-01
  • 2010-09-09
  • 1970-01-01
  • 2023-04-02
相关资源
最近更新 更多