C语言#pragma常用方法

#pragma用于指示编译器完成一些特定的动作

1 设置内存对齐与警告

#pragma pack(push,_CRT_PACKING) //从此处开始结构体成员按照_CRT_PACKING所表示的字节数对齐

#pragma warning(push,3) //表示从此处开始将警告级别提升为3

#pragma warning(disable: 4521 4522 4800) //表示不记录4521 4522 4800号警告

#pragma warning(pop) //恢复警告

#pragma pack(pop) //恢复对齐

2 避免使用到外部宏定义,比如new 举例

#pragma push_macro("new")

#undef new

... // 期间使用的new为原始语义

#pragma pop_macro("new")

将宏定义new压入栈并取消它的定义,如此一来new的本来含义便获得了恢复,使用完毕后将宏定义new弹出栈,恢复宏定义

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
#pragma是一种编译指令,用于告诉编译器如何处理代码。在MSP430的开发中,#pragma常用于定义中断服务例程、优化代码、设置代码存储和调用约定等。 以下是常用的#pragma指令: 1. #pragma vector:定义中断服务例程。例如: ```c #pragma vector=TIMER0_A0_VECTOR __interrupt void Timer0_A0_ISR(void) { // 中断服务例程 } ``` 上述代码定义了一个使用Timer0_A0模块的中断服务例程。当Timer0_A0模块产生中断时,CPU会跳转到这个中断服务例程执行。 2. #pragma optimize:指定代码优化级别。例如: ```c #pragma optimize=1 void my_function(void) { // do something } ``` 上述代码告诉编译器对函数`my_function`进行O1级别的优化,即启用基本的代码优化。如果需要更高级别的优化,可以使用O2、O3等级别。 3. #pragma location:指定变量存储的地址。例如: ```c #pragma location=0x1000 unsigned char my_var; ``` 上述代码指定变量`my_var`存储在0x1000地址处。 4. #pragma pack:设定结构体的对齐方式。例如: ```c #pragma pack(push, 1) struct my_struct { unsigned char a; unsigned int b; }; #pragma pack(pop) ``` 上述代码指定结构体`my_struct`按照1字节对齐方式存储,可以避免出现内存空洞。 5. #pragma func_prototypes:指定函数调用约定。例如: ```c #pragma func_prototypes void my_function(void); ``` 上述代码指定函数`my_function`使用C语言默认的调用约定,即按照堆栈方式传递参数和返回值。 需要注意的是,#pragma指令的具体用法和效果可能因编译器而异,需要查阅编译器文档或者参考实际使用情况。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值