为什么Microsoft将类型CHAR定义为CHAR,将宏CONST定义为CONST?

为什么Microsoft将类型CHAR定义为CHAR,将宏CONST定义为CONST?,c,windows,types,macros,C,Windows,Types,Macros,作为一名C初学者,仔细观察,我发现有很多类型的定义似乎是多余的 例如,使用typedef: 字符--typedef CHAR 浮点--typedef浮点 也作为对象宏: 常数--#定义常数常数 据我所知,typedef和#define通常用于阐明程序员的意图: #define BOOL int 和/或缩短类型声明(想不出一个好例子): 然而,我不明白用char替换char怎么会有任何好处 那么微软为什么要定义这些类型呢?这只是一个猜测,没有任何研究证实 语言中的基本类型都是小写类型。标

作为一名C初学者,仔细观察,我发现有很多类型的定义似乎是多余的

例如,使用
typedef

  • 字符--
    typedef CHAR
  • 浮点--
    typedef浮点
也作为对象宏:

  • 常数--
    #定义常数常数
据我所知,
typedef
#define
通常用于阐明程序员的意图:

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

然而,我不明白用char替换char怎么会有任何好处


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

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

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


如果你使用
BYTE
作为一种类型,难道你不想使用
CHAR
而不是
CHAR
作为一种类型吗?

因为。。。撇开玩笑不谈,我想一定有历史的原因reasons@bolov是的,看起来是这样,上面的重复部分有一些很好的答案。这是微软将winapi从C编译器实现中分离出来的基本方法。30年前编写的使用这些typedef的程序,目标是16位8086处理器,今天仍然在64位Haswell处理器上编译和运行。这是一个有趣的理论,我认为可能有一些道理。事实上,复制品上有一些很棒的答案。
typedef unsigned char BYTE;