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


}
复制代码

 

 

 

 

 

 

 

 

 

 

 

 

 

 

posted @   天子骄龙  阅读(102)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!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容器
点击右上角即可分享
微信分享提示

目录导航