常用的typedef 定义
今天开始学习VC++基础,系统编程栏目下都是WinAPI和MFC的内容,此为浏览博客园时学习的一篇文章,觉得很实用,拿来做笔记。
出处见最底部。
三行代码:
typedef
char
CHAR
;
typedef
CHAR
*
PCHAR
,*LPCH,*PCH,*NPSTR,*
LPSTR
,*
PSTR
;
typedef
CONST
CHAR
*LPCCH,*PCCH,*
LPCSTR
,*
PCSTR
;
1. 第一行:
CHAR
就是
char
类型,只是一个大写一个小写。
2. 第二行:
PCHAR
是一个指向字符的
char
型指针,因为P就有指针的含义,而
CHAR
有字符的含义。
3. 第二行:LPCH和PCH含义一样,都是指向字符的指针。那为什么第一个前面加L,这是历史遗留问题,以前分远指针(开头加L)和近指针(开头加N),现在指针都是四个字节,不分远近,加N和加L都一样,不要被L误导,当你看到LPCH时把它看成PCH就可以了。
4. 第二行:同理NPSTR、
LPSTR
和
PSTR
都一样,都把它看成
PSTR
,表示指向字符串的指针。STR就是string的缩写。
5. 第三行:LPCCH和PCCH与第二行LPCH和PCH相比多了一个C,为什么?你看定义是不是有一个CONST,表示这是常量指针,就是不能修改指针指向的内容,所以多了一个C。LPCCH和PCCH表示指向一个字符的常量指针。
LPCSTR
和
PCSTR
表示指向字符串的常量指针。
接着看四行代码:
typedef
unsigned
short
wchar_t
;
typedef
wchar_t
WCHAR
;
typedef
WCHAR
*
PWCHAR
,*LPWCH,*PWCH,*NWPSTR,*
LPWSTR
,*
PWSTR
;
typedef
CONST
WCHAR
*LPCWCH,*PCWCH,*
LPCWSTR
,*
PCWSTR
;
解释:
1. 第二行:
WCHAR
实际就是unsigned
short
类型,W就是word的缩写,占两个字节。
2. 第三行:
PWCHAR
、LPWCH、PWCH表示指向宽字符的unsigned
short
指针;
LPWSTR
和
PWSTR
表示指向字符串的unsigned
short
指针。
3. 第三行:表示常量指针。
最后看这七行代码:
#indef UNICODE
typedef
unsigned
short
TCHAR
,*
PTCHAR
,*PTCH,*LPTCH,*
PTSTR
,*
LPTSTR
;
typedef
const
unsigned
short
*
LPCTSTR
;
#else //ANSI
typedef
char
TCHAR
,*
PTCHAR
,*PTCH,*LPTCH,*
PTSTR
,*
LPTSTR
;
typedef
const
char
*
LPCTSTR
;
#endif
将二三行和五六行代码对比可知,除了类型由unsigned
short
变成
char
其他都没变,其中每个都含有有一个T,表示通用,可以在ANSI和Unicode两个版本中来回切换使用而不用改代码。
常用的typedef 定义的更多相关文章
- iOS - 常用的宏定义
1.处理NSLog事件(开发者模式打印,发布者模式不打印) 1 2 3 4 5 #ifdef DEBUG #define NSLog(FORMAT, ...) fprintf(stderr,& ...
- typedef定义函数类型或函数指针
转载请标明出处: 最近在看redis的代码,发现了有关函数指针的部分,想把它记下来. 在redis中有类似下面的定义,利用typedef 定义了一个新的类型,这种类型是一个函数: typedef vo ...
- iOS开发——常用宏的定义
有些时候,我们需要将代码简洁化,这样便于读代码.我们可以将一些不变的东东抽取出来,将变化的东西作为参数.定义为宏,这样在写的时候就简单多了. 下面例举了一些常用的宏定义和大家分享: 1. 判断设备的操 ...
- ios开发之常用宏的定义
有些时候,我们需要将代码简洁化,这样便于读代码.我们可以将一些不变的东东抽取出来,将变化的东西作为参数.定义为宏,这样在写的时候就简单多了. 下面例举了一些常用的宏定义和大家分享: 1. 判断设备的操 ...
- gojs常用API-画布定义
持续更新中 基础画布定义API画布初始位置 initialContentAlignment: go.Spot.Center,画布位置,定义后就不能拖动画布了,画布位置交由gojs管理 contentA ...
- 『转载』hadoop2.x常用端口、定义方法及默认端口
『转载』hadoop2.x常用端口.定义方法及默认端口 1.问题导读 DataNode的http服务的端口.ipc服务的端口分别是哪个? NameNode的http服务的端口.ipc服务的端口分别是哪 ...
- DELPHI-Delphi常用类型及定义单元
DELPHI-Delphi常用类型及定义单元 Type Unit Date SysUtils DeleteFile SysUtils or Windows (different versions) D ...
- [转载]Delphi常用类型及定义单元
原文地址:Delphi常用类型及定义单元作者:沧海一声笑 Delphi常用类型及定义单元-总结 sndplaysound mmsystem Type Unit Date ...
- typedef 定义结构体数组或其他数组
typedef 定义结构体数组或其他数组 C\C++语言下 typedef其实是对一个变量类型的名字进行重新定义,例如下面中: typedef struct { int num[10]; char n ...
- typedef定义数组
typedef定义数组 问题来源 在学习高一凡数据结构与算法解析串这一章节时,遇到如下代码不明白其意义,经过查阅终于搞明白 typedef unsigned char SString[MAXLEN + ...
随机推荐
- C# Linq不同类型数组之间的转换
string[] strArray = "a,b,c,d,e,f,g".Split(new char[]{ ',' }); int[] intArray; //C# 3.0下用此句 ...
- angularjs 1.4.x 内部组件介绍
内部Services 1, $cacheFactory angular 内部缓存类,构建一个缓存对象. var cache = $cacheFactory('cacheId'); expect($ca ...
- linux 部署python 系统服务管理命令 yum源设置 linux定时任务 python在linux的虚拟环境安装以及使用
安装python3 三种方式 ==linux下很多脚本默认都用python2, 所以不要把python3的执行文件改为python,因为linux里默认python就是运行python2版本 == y ...
- redhat单网卡配置多个IP
单网卡配置多个IP 进入配置网络的文件目录 复制网络配置文件并修改名字 配置网络 网络1 网络2 激活网络设备 重启网络 重启计算机,查看IP地址 (有问题可以提出来)
- jadx 定位方法
目录 链接参数定位 链接参数定位 通过搜索请求链接中的参数来定位函数位置,如下图所示,请求链接为 https://www.python-spider.com/api/app1,app1为链接标识,可以 ...
- locust socektio协议压测
# -*-coding:UTF-8 -*- from locust import HttpLocust, TaskSet, task, TaskSequence, Locust, events imp ...
- Python面向对象编程——一些类定义(杂)
一.abstractmethod 子类必须全部实现重写父类的abstractmethod方法 非abstractmethod方法可以不实现重写 带abstractmethod方法的类不能实例化 fro ...
- Taro 弹窗阻止小程序滑动穿透(亲测有效) tabbar数据缓存不更新 入口场景值不同
v3.0 推出后反馈最多的问题之一,就是在 touchmove 事件回调中调用 e.stopPropagation() 并不能阻止滑动穿透. 这是因为 Taro 3 的事件冒泡机制是单独在小程序逻辑层 ...
- Required request part 'file' is not present
问题描述: @RequestMapping(value = "upload", method = RequestMethod.POST,consumes = MediaType.M ...
- C# 以管理员方式运行程序
让你的程序以管理员方式运行 在Program.cs文件中添加如下代码 /// <summary> /// 应用程序的主入口点. /// </summary> [STAThrea ...