c++ - 为什么 C 和 C++ 关键字 "#defined"或 "typedefed"也作为它们的大写版本?

标签 c++ c typedef c-preprocessor

很抱歉标题令人困惑,但我想不出一个标题可以清楚地描述我的问题。在编写 C 或 C++ 程序时,通常可以引用关键字,例如 char 与 CHAR、int 与 INT、void 与 VOID 等。

在winnt.h中,它们的定义如下:

#ifndef VOID
#define VOID void
typedef char CHAR;
typedef short SHORT;
typedef long LONG;
#if !defined(MIDL_PASS)
typedef int INT;
#endif
#endif

这样做有什么用?是为了满足约定还是保证兼容性?

最佳答案

我一直认为这些琐碎的类型定义(例如 int -> INT)更多的是关于一致性。

我的意思是,Win32 中有很多大写的 typedef - DWORD、WORD、LPARAM、WPARAM、HANDLE、HWND,其中一些只是整数,它们的名称提供了有关其使用的上下文,并且其中一些(例如 RECT 和 WNDCLASS)代表结构。

考虑函数 void f(int, BOOL, char, PAINTSTRUCT) 的情况;对我来说,允许所有大写字母感觉更一致:VOID f(INT, BOOL, CHAR, PAINTSTRUCT)。但这可能就是我。

关于c++ - 为什么 C 和 C++ 关键字 "#defined"或 "typedefed"也作为它们的大写版本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17370976/

相关文章:

c++如何声明返回对象 vector 的函数

c++ - 如何将指针传递给函数

c++ - _mm_fmadd_pd 程序收到信号 SIGILL,非法指令

c - 即使定义了 "-nostdlib"选项,如何运行构造函数

c - 崩溃期间未捕获 SIGSEGV 信号

C++ - 模板 + 'using' 子句 - 参数不匹配错误

c++ - Typdef 和隐式转换

c++ - 如何移动到文件夹并执行 Windows 命令行调用

c - 读取一个 4 位整数并输出数字之和的程序

c++ - 头文件中声明的 typedef 在源文件中不可用