首页 > 技术文章 > PSTR、LPSTR等宏原型

ThatsMyTiger 2017-05-09 09:04 原文

1、首先介绍char、wchar_t ,宽字符wchar_t和窄字符char.

  窄字符char了,大家都很清楚,就是8bit表示的byte,长度固定。char字符只能表示ASII码表中的256个字符,包括前128个可见字符和后面的128个不可见字符。

  宽字符wchar_t是Unicode字符的数据类型,wchar_t 的 w, 表示 wide,后缀 t,表示 type。在很多平台上,wchar_t 定义为 typedef unsigned short wchar_t;传统的 char 大小为1个字节,可表示的字符数量很有限,为窄字符。wchar_t 通常大小为 2 字节(有些平台上可能为 4 字节),相对 char 来说,就为宽字符(wide character),wchar_t 大小足够表示 unicode 编码。

  在字符串前面加L,可以表示 wchar 字符串。比如const wchar_t* str = L"中国";

2、各种宏定义

typedef char CHAR;  
typedef wchar_t WCHAR;  

typedef CHAR* PCHAR,*PCH,*LPCH,*NPSTR,*PSTR,*LPSTR;  
typedef  CONST CHAR* PCCH,*LPCCH,*PCSTR,*LPCSTR;  

typedef WCHAR *PWCHAR,*NWPSTR,*PWCH,*LPWCH,*PWSTR,*LPWSTR;  
typedef CONST WCHAR* PCWCH,*LPCWCH,PCWSTR,LPCWSTR;  

typedef /* [string] */ WCHAR __RPC_FAR *LPWSTR;    
typedef /* [string] */ TCHAR __RPC_FAR *LPTSTR;  

typedef LPSTR LPTCH, PTCH;  
typedef LPSTR PTSTR, LPTSTR;  
typedef LPCSTR LPCTSTR;  

为了统一成大写,C++给char,wchar_t,const 取了个大写别名。

理解以上的命名规则就可以记住每种别名带表什么意思

N:代表near,在16位系统中代表16位的段内地址

L:代表long(far),在16位系统中代表16位的段地址+16位的偏移地址

在32位系统中 N和L已经没有作用,只是为了向前兼容(兼容16位机器)才保留这些定义。

P:代表指针

C:代表CONST(const)

W:代表WCHAR(wchar_t)

T:代表宏_T(一个兼容的宏,当定义了UNICODE或者_UNICODE是表示WCHAR,否则表示char)

CH:char的简写

STR:string的简写

明白了以上每个字母代表什么含义之后,只要知道排列顺序即可。正则表达式:[L/N][P][C][W/T][CH/STR]

突然发现 typedef也没用过几次。。。

 

 原文博客:http://blog.csdn.net/w343051232/article/details/7083276

 参考问答:https://www.zhihu.com/question/27174874

推荐阅读