【C++】预处理指令汇总

一、#Pragma

1.1 #Pragma once用于指示编译器头文件只编译一次

举例:

#pragma once

#include <list>
#include <mutex>
...
...
...

1.2 #Pragma pack(n) 用于指定结构体、联合体或类实例在内存中的字节对齐方式

n 表示指定对齐字节数,如果()内为空的话,则表示恢复默认对齐方式。使用时将需要对齐的结构体、联合体、类使用一对 #Pragma pack(n) 包起来。
举例:

#include <iostream>

// 设置内存对齐为1字节
#pragma pack(1)

// 枚举类型
typedef enum {
	__VALUE1 = 1,
	__VALUE2 = 2,
	__VALUE3 = 3,
	__VALUE4 = 4,
	__VALUE5 = 5,
	__VALUE6 = 6,
	__VALUE7 = 7,
	__VALUE8 = 8,
	__VALUE9 = 9		///< 总是4个字节
}E_TestEnum;			///< #pragma pack(1)对枚举无效。因为枚举类型在内存中并不占用独立的空间,它只是为一组常量定义了符号名称

// 结构体
struct MyStructEnmu {
	char a;        // 1字节
	int b;         // 4字节
	E_TestEnum c;  // 4字节
	short d;       // 2字节
};

// 结构体
struct MyStruct {
	char a;        // 1字节
	int b;         // 4字节
	short c;       // 2字节
};

// 联合体
union MyUnion {
	int intValue;		// 4字节
	float floatValue;	// 4字节
	char charValue;		// 1字节
};

// 类
class MyClass {
private:
	char x;         // 1字节
	double y;       // 8字节
public:
	int z;          // 4字节
};

// 恢复默认的内存对齐设置
#pragma pack()

int main() {
	
	std::cout << "Size of MyEnum: " << sizeof(E_TestEnum) << " bytes\n";			// 4字节
	std::cout << "Size of MyStructEnmu : " << sizeof(MyStructEnmu) << " bytes\n";	// 11字节
	std::cout << "Size of MyStruct: " << sizeof(MyStruct) << " bytes\n";			// 7字节 (1 + 4 + 2)
	std::cout << "Size of MyUnion: " << sizeof(MyUnion) << " bytes\n";				// 4字节(联合体在内存中的大小等于它最大成员的大小)
	std::cout << "Size of MyClass: " << sizeof(MyClass) << " bytes\n";				// 13字节 (1 + 8 + 4)

	system("pause");
	return 0;
}

运行结果
在这里插入图片描述

二、to be continued

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

油炸自行车

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值