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总结难免个别瑕疵,一切以个人尝试为准。

相关推荐
jllllyuz9 小时前
单载波中继系统资源分配算法综述与实现
开发语言·matlab
Hello.Reader9 小时前
PyFlink Table Arrow 原理、Exactly-Once、Batch Size、内存风险与最佳实践
开发语言·batch
星火开发设计9 小时前
二叉树详解及C++实现
java·数据结构·c++·学习·二叉树·知识·期末考试
智商偏低9 小时前
abp PermissionDefinitionManager源码解析
开发语言·前端·javascript
亚历山大海9 小时前
PHP HTML 实体(HTML Entities)没有被正确解码导致< 和 δ 等字符被转换
开发语言·html·php
CSDN_RTKLIB9 小时前
C++取余符号%
开发语言·c++
C++chaofan9 小时前
Java 并发编程:synchronized 优化原理深度解析
java·开发语言·jvm·juc·synchronized·
WBluuue10 小时前
Codeforces Good Bye 2025 Div1+2(ABCDE)
c++·算法
bubiyoushang88810 小时前
基于MATLAB的非线性有限元梁扭矩分析实现
开发语言·matlab
No0d1es10 小时前
2025年12月 GESP CCF编程能力等级认证Python二级真题
开发语言·python·青少年编程·gesp·ccf