C++ 常用类型写法和全称

为了更准确更快速的看懂C++代码,委托AI总结了

C++ 常用类型写法和全称:

1. 字符类型

写法 全称 说明
char CHARacter 8位字符,用于ANSI
wchar_t Wide CHAR acter Type 宽字符,16位(Windows)/32位(Linux)
_TCHAR Text CHARacter 通用字符类型,根据编译设置变化
TCHAR Text CHARacter 同 _TCHAR

2. 整数类型

写法 全称 说明
BOOL BOOLean 布尔类型 (实际上是int)
BYTE BYTE 8位无符号整数
WORD WORD 16位无符号整数
DWORD Double WORD 32位无符号整数
INT INTeger 32位有符号整数
LONG LONG 32位有符号整数
UINT Unsigned INTeger 32位无符号整数
SHORT SHORT 16位有符号整数

3. 指针类型

写法 全称 说明
LPSTR Long Pointer to STRing 指向ANSI字符串的长指针
LPCSTR Long Pointer to Constant STRing 指向ANSI常量字符串的长指针
LPWSTR Long Pointer to Wide STRing 指向Unicode字符串的长指针
LPCWSTR Long Pointer to Constant Wide STRing 指向Unicode常量字符串的长指针
LPTSTR Long Pointer to Text STRing 指向通用字符串的长指针
LPCTSTR Long Pointer to Constant Text STRing 指向通用常量字符串的长指针
PVOID Pointer to VOID 泛型指针
LPVOID Long Pointer to VOID 泛型长指针

4. 句柄类型

写法 全称 说明
HANDLE HANDLE 通用句柄
HWND Handle to WINdow 窗口句柄
HDC Handle to Device Context 设备上下文句柄
HINSTANCE Handle to INSTANCE 实例句柄
HMODULE Handle to MODULE 模块句柄
HKEY Handle to KEY 注册表键句柄

5. 特殊类型

写法 全称 说明
HRESULT Handle RESULT COM操作结果代码
VARIANT VARIANT 自动化变量类型
BSTR Basic STRing 自动化字符串
GUID Globally Unique IDentifier 全局唯一标识符
FILETIME FILE TIME 文件时间结构
SYSTEMTIME SYSTEM TIME 系统时间结构

6. 字符串宏

宏定义 说明
_T("text") 通用文本宏
TEXT("text") 通用文本宏
L"text" Unicode字符串字面量

使用示例:

cpp 复制代码
#include <windows.h>
#include <tchar.h>

void Example()
{
    // 字符类型使用
    TCHAR szBuffer[MAX_PATH];           // 通用字符缓冲区
    LPCTSTR lpszText = _T("Hello");     // 指向常量通用字符串
    
    // 整数类型使用
    DWORD dwSize = 1024;                // 32位无符号整数
    BOOL bSuccess = TRUE;               // 布尔值
    
    // 句柄使用
    HINSTANCE hInstance = GetModuleHandle(NULL);  // 获取模块句柄
    HWND hWnd = FindWindow(NULL, _T("Calculator")); // 查找窗口句柄
    
    // 字符串操作
    _tcscpy(szBuffer, _T("Test"));      // 通用字符串拷贝
    
    // 根据编译模式,TCHAR 会自动转换为 char 或 wchar_t
#ifdef _UNICODE
    // 编译为Unicode时,TCHAR = wchar_t
    wprintf(L"Unicode mode: %s\n", szBuffer);
#else
    // 编译为ANSI时,TCHAR = char  
    printf("ANSI mode: %s\n", szBuffer);
#endif
}

历史背景

这些类型主要来源于Windows API的演变:

  • "Long Pointer":源于16位Windows时代,区分近指针和远指针

  • "TCHAR"系统:为了解决ANSI和Unicode编码的兼容性问题

  • 匈牙利命名法 :通过变量名前缀表明类型(如sz表示字符串,h表示句柄等)

在现代C++开发中,推荐使用标准类型如std::stringstd::wstring等,但在Windows API编程中这些传统类型仍然很常见。

Windows编程中的匈牙利命名法

sz - 字符串(String Zero)

全称:String Zero-terminated

cpp 复制代码
// sz 表示以零结尾的字符串
char szFileName[MAX_PATH];      // 以NULL结尾的ANSI字符串
WCHAR szUserName[32];          // 以NULL结尾的Unicode字符串

为什么用 "sz":

  • s = String(字符串)

  • z = Zero-terminated(以零结尾)

  • 表示这是一个以NULL字符('\0')结尾的C风格字符串

历史背景:

在C语言中,字符串通常以NULL字符标记结束:

cpp 复制代码
char str[] = "Hello";  // 实际存储: 'H','e','l','l','o','\0'

sz前缀提醒开发者这是一个传统的C字符串,而不是面向对象的字符串类。

h - 句柄(Handle)

全称:Handle

cpp 复制代码
// h 表示各种系统资源的句柄
HWND hWnd;          // 窗口句柄
HANDLE hFile;       // 文件句柄
HINSTANCE hInst;    // 实例句柄
HDC hDC;            // 设备上下文句柄

为什么用 "h":

  • 表示这是一个系统资源的引用标识符

  • 句柄不是指针,而是系统内部表的索引

  • 开发者不应该直接操作句柄的值

其他常见的匈牙利命名法前缀

前缀 全称 含义 示例
b Boolean 布尔值 BOOL bSuccess
dw Double Word 32位无符号整数 DWORD dwSize
w Word 16位无符号整数 WORD wParam
by Byte 8位无符号整数 BYTE byData
n Number 整数 int nCount
i Index 索引 int iIndex
p Pointer 指针 char* pszName
lp Long Pointer 长指针 LPSTR lpszText
c Count 计数 int cItems
cx/cy Coordinate X/Y 坐标 int cxWidth, cyHeight
x/y Coordinate 坐标 int xPos, yPos
rgb Red Green Blue 颜色值 COLORREF rgbColor

使用示例

cpp 复制代码
#include <windows.h>

void ExampleFunction()
{
    // 字符串相关
    TCHAR szAppName[64];           // 应用程序名称(零结尾字符串)
    LPCTSTR lpszClassName;         // 长指针指向常量字符串
    char* pszBuffer;               // 指针指向字符串
    
    // 句柄相关
    HWND hMainWnd;                 // 主窗口句柄
    HDC hMemoryDC;                 // 内存设备上下文句柄
    HANDLE hFile;                  // 文件句柄
    HINSTANCE hInstance;           // 实例句柄
    
    // 数值相关
    DWORD dwFileSize;              // 32位文件大小
    BOOL bFileOpened;              // 布尔标志
    INT nItemCount;                // 项目计数
    WORD wMagicNumber;             // 16位魔数
}
cpp 复制代码
// 复杂的匈牙利命名法示例
BOOL CreateMainWindow(
    HINSTANCE hInstance,       // 输入:实例句柄
    LPCTSTR lpszWindowName,    // 输入:窗口名称字符串
    int nWidth,                // 输入:宽度
    int nHeight,               // 输入:高度
    HWND* phWnd                // 输出:创建的窗口句柄指针
)
{
    TCHAR szClassName[64] = _T("MainWindowClass");
    BOOL bResult = FALSE;
    DWORD dwStyle = WS_OVERLAPPEDWINDOW;
    
    // ... 创建窗口的逻辑
    
    return bResult;
}

现代开发中的变化

虽然匈牙利命名法在历史上有其价值,但在现代C++开发中:

  1. 不再强制使用:智能指针、RAII等现代特性减少了对原始类型前缀的需求

  2. 仍然有用:在Windows API编程和系统级编程中仍然常见

  3. 类型安全:现代C++更依赖类型系统而不是命名约定

cpp 复制代码
// 现代C++风格(推荐)
class Application 
{
private:
    std::wstring m_windowName;    // 使用有意义的名称
    HWND m_mainWindow;           // 保留h前缀用于句柄
    int m_width;                 // 不使用n前缀
    int m_height;
    bool m_isRunning;            // 使用bool而不是BOOL
};

总结szh这些前缀是Windows编程历史的产物,了解它们有助于阅读和维护遗留代码,但在新项目中应该根据团队规范谨慎使用。

注:AI总结难免个别瑕疵,一切以个人尝试为准。

相关推荐
q***R3082 小时前
Kotlin注解处理
android·开发语言·kotlin
lly2024062 小时前
C++ 数组
开发语言
csbysj20202 小时前
C 强制类型转换
开发语言
m0_626535202 小时前
代码分析
开发语言·c#
q***3752 小时前
QoS质量配置
开发语言·智能路由器·php
__BMGT()2 小时前
参考文章资源记录
开发语言·c++·qt
一晌小贪欢2 小时前
【Python办公】用 Selenium 自动化网页批量录入
开发语言·python·selenium·自动化·python3·python学习·网页自动化
ouliten2 小时前
C++笔记:std::string_view
开发语言·c++·笔记
玫瑰花店3 小时前
万字C++中锁机制和内存序详解
开发语言·c++·算法