#define和typedef在windows上的应用
typedef的应用
typedef是在计算机编程语言中用来为复杂的声明定义简单的别名。
下面的代码定义了一些常见类型的别名
typedef int INT;
typedef unsigned int UINT;
typedef unsigned int *PUINT;
windows通常定义结构体的同时会定义结构体的别名,下面的代码定义了tagPAINTSTRUCT结构体,同时给了定义PAINTSTRUCT别名以及指针类型的别名PPAINTSTRUCT等。
typedef struct tagPAINTSTRUCT {
HDC hdc;
BOOL fErase;
RECT rcPaint;
BOOL fRestore;
BOOL fIncUpdate;
BYTE rgbReserved[32];
} PAINTSTRUCT, *PPAINTSTRUCT, *NPPAINTSTRUCT, *LPPAINTSTRUCT;
#define的应用
1. 简单的define定义
#define MAX_PATH 260
2. define定义函数
#define max(a,b) (((a) > (b)) ? (a) : (b))
3. #和##操作符
##用于连接字符,windows的应用之一就是TEXT定义。
TEXT("Hello")等价于__TEXT("Hello"),__TEXT("Hello")等价于L"Hello"。
#define TEXT(quote) __TEXT(quote)
#define __TEXT(quote) L##quote
#用于给字符加双引号,MKSTR(HELLO C++)等价于"HELLO C++"
#define MKSTR( x ) #x
4.多行定义
"afxmsg.h"下ON_WM_PAINT()宏定义如下。
#define ON_WM_PAINT() \
{ WM_PAINT, 0 , 0 , 0 , AfxSig_vv, \
(AFX_PMSG)(AFX_PMSGW) \
(static_cast < void (AFX_MSG_CALL CWnd:: * )( void ) > ( & ThisClass :: OnPaint)) } ,
5.条件编译
CreateWindow在Unicode和MBCS下执行不同的函数。
#ifdef UNICODE
#define CreateWindow CreateWindowW
#else
#define CreateWindow CreateWindowA
#endif // !UNICODE
6.预编译宏定义
c++提供了一些预编译宏定义,__LINE__,__FILE__,__DATE__,__TIME__。
#include <iostream>
using namespace std;
int main () {
cout << "Value of __LINE__ : " << __LINE__ << endl;
cout << "Value of __FILE__ : " << __FILE__ << endl;
cout << "Value of __DATE__ : " << __DATE__ << endl;
cout << "Value of __TIME__ : " << __TIME__ << endl;
return 0;
}
编译输出结果如下
Value of __LINE__ : 5
Value of __FILE__ : main.cpp
Value of __DATE__ : Oct 21 2016
Value of __TIME__ : 01:01:48
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?