MFC常用宏
MAX_PATH
是C语言运行时库中通过#define指令定义的一个宏常量,它定义了编译器所支持的最长全路径名的长度
TCHAR ch[MAX_PATH] = { 0 };
MAKELPARAM(20,20) 把坐标值转化成LPARAM
#include<iostream> void func(void) { char ch3[100] =__FUNCTION__; //返回当前函数名 std::cout << ch3 << std::endl; } int main() { char ch[250]= __FILE__; //返回当前文件的全路径 int n = __LINE__; //返回当前行号 char ch1[100] = __TIME__; //返回当前系统时间 char ch2[100] = __DATE__; char ch4[100] = __TIMESTAMP__; //当前系统时间戳 std::cout << ch << std::endl; std::cout << n << std::endl; std::cout << ch1 << std::endl; std::cout << ch2 << std::endl; func(); std::cout << ch4 << std::endl; return 0; }
时间间隔范围:
USER_TIMER_MINIMUM=0x0000000A毫秒(最小值) 到 USER_TIMER_MAXIMUM=0x7FFFFFFF 毫秒(最大值)
int a[10] = { 0 }; int n = ARRAYSIZE(a);//获取数组长度
offsetof获取结构体中的偏移量
//定义在 <cstddef> 头文件中 #include <cstddef> struct MyStruct { int a; char b; double c; }; void CoffsetofDlg::OnBnClickedButton1() { // TODO: 在此添加控件通知处理程序代码 size_t offsetA = offsetof(MyStruct, a); /* offsetof 是一个宏,用于获取结构体中特定成员的偏移量(offset) 第一个参数是结构体的名字,第二个参数是结构体成员的名字 返回结构体中成员的偏移量。偏移量是size_t类型的 offsetA=0 */ size_t offsetB = offsetof(MyStruct, b); //offsetB=4 size_t offsetC = offsetof(MyStruct, c); //offsetC=8 /* 对齐方式会影响成员的偏移量 在这个例子中,int类型是4个字节,char类型是1个字节;由于a和b的对齐要求,编译器在b之后添加了3个填充字节,然后才将成员c放置在偏移量为8的位置 如果您希望更精细地控制结构体成员的对齐方式,可以使用特定的对齐指令(如#pragma pack)来设置对齐规则 */ }
#pragma (pack,n)
默认对齐方式
//定义在 <cstddef> 头文件中 #include <cstddef> struct MyStruct { int a; char b; double c; char d; char e; }; void CoffsetofDlg::OnBnClickedButton1() { // TODO: 在此添加控件通知处理程序代码 size_t offsetA = offsetof(MyStruct, a); /* offsetof 是一个宏,用于获取结构体中特定成员的偏移量(offset) 第一个参数是结构体的名字,第二个参数是结构体成员的名字 返回结构体中成员的偏移量。偏移量是size_t类型的 offsetA=0 */ size_t offsetB = offsetof(MyStruct, b); //offsetB=4 size_t offsetC = offsetof(MyStruct, c); //offsetC=8 size_t offsetD = offsetof(MyStruct, d); //offsetD=16 size_t offsetE = offsetof(MyStruct, e); //offsetE=17 }
#pragma pack(push, n)设置对齐方式
#pragma pack(push, 1) //n 表示对齐模数(alignment),通常是 1、2、4、8 等 2 的整数次幂 //对齐是指在结构体等数据类型中,每个成员变量占据的内存空间大小必须是它本身大小或对齐模数的整数倍。对齐的目的是为了让 CPU 更高效地读取数据,因为未对齐的数据会使 CPU 进行多次内存读写操作 struct MyStruct { int a; char b; double c; char d; char e; }; #pragma pack(pop) void CoffsetofDlg::OnBnClickedButton1() { // TODO: 在此添加控件通知处理程序代码 size_t offsetA = offsetof(MyStruct, a); size_t offsetB = offsetof(MyStruct, b); //offsetB=4 size_t offsetC = offsetof(MyStruct, c); //offsetC=5 size_t offsetD = offsetof(MyStruct, d); //offsetD=13 size_t offsetE = offsetof(MyStruct, e); //offsetE=14 }
#pragma pack(push, 2) //n 表示对齐模数(alignment),通常是 1、2、4、8 等 2 的整数次幂 //对齐是指在结构体等数据类型中,每个成员变量占据的内存空间大小必须是它本身大小或对齐模数的整数倍。对齐的目的是为了让 CPU 更高效地读取数据,因为未对齐的数据会使 CPU 进行多次内存读写操作 struct MyStruct { int a; char b; double c; char d; char e; }; #pragma pack(pop) void CoffsetofDlg::OnBnClickedButton1() { // TODO: 在此添加控件通知处理程序代码 size_t offsetA = offsetof(MyStruct, a); size_t offsetB = offsetof(MyStruct, b); //offsetB=4 size_t offsetC = offsetof(MyStruct, c); //offsetC=6 size_t offsetD = offsetof(MyStruct, d); //offsetD=14 size_t offsetE = offsetof(MyStruct, e); //offsetE=15 }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
2022-03-06 halcon-dilation_circle圆形区域膨胀
2022-03-06 halcon-gray_histo计算直方图
2020-03-06 python--collections容器