前两天看到的#pragma用法

作者在使用BCB进行Winsdk编程时,遇到资源文件无法与程序源代码链接的问题,后通过google找到用#pragma编译指令控制的方法。文中介绍了#pragma在C++ Builder和VC++中的多种用法,如控制警告信息、指定编译优先级等,还提醒要注意其与头文件的位置关系。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前两天使用BCB进行Winsdk的编程中,死活无法加载资源文件(*.res),写出的RC文件没有问题,用Brcc32也可以生成资源文件,但是就是无法和程序源代码进行链接起来(如果用IDE就好办多了,但无奈现在用的是命令行编译),百思不得其解,到晚上发帖无数,结果还是没有搞定。

后来无奈用google,发现好似可以用#pragma编译指令来控制,在优快云的一些文章中找到了答案,也发现了一些相关的其他技巧,写下来要记牢。

#pragma 的用法


这是一个编译控制指令,可以在编译时动态地调整编译选项,这种指令在不同的编译系统中是不同的。


    #pragma warning(disable 4068)的意思是不显示4068号警告信息,如果编译时总是出现4068号警告,而认为肯定不会有错误,可以使用这条指令。这条指令C++ Builder和VC++都支持。
    如果你没有在函数内部使用某个参数,编译时会报告"Parameter name is never used in function func-name",使用#pragma argsused,编译时就不再警告了。VC++不支持这条指令。
    在C++ Builder和VC++的帮助中所有#pragma的详细说明。


    #pragma hdrstop表示预编译头文件到此为止,后面的头文件不进行预编译。BCB可以预编译头文件以加快链接的速度,但如果所有头文件都进行预编译又可能占太多磁盘空间,所以使用这个选项排除一些头文件。
    有时单元之间有依赖关系,比如单元A依赖单元B,所以单元B要先于单元A编译。你可以用#pragma startup指定编译优先级,如果使用了#pragma package(smart_init) ,BCB就会根据优先级的大小先后编译。
    #pragma resource "*.dfm"表示把*.dfm文件中的资源加入工程。*.dfm中包括窗体外观的定义。

在使用#pragma的时候要注意和头文件的相互位置,在C++Builder中,焦点放在#pragma字段上,按F1可以获得更多更详细的用法介绍说明。

### C/C++ 编译器 `#pragma` 指令详解 #### 特定功能的 `#pragma` 指令解析 对于嵌入式开发和其他低级编程场景,某些特殊的编译器控制命令非常有用。以下是几个常见的用于特定硬件操作和行为控制的 `#pragma` 指令: - **sfr (Special Function Register)** 这个伪指令允许程序员定义特殊功能寄存器(SFR),通常应用于单片机或其他微控制器环境中。SFR 是指那些可以直接访问并修改其位或字节以改变设备状态的内存映射寄存器。 ```c #pragma sfr P0 = 0x80; // 定义P0端口对应的地址为0x80 ``` - **DI 和 EI** DI(Disable Interrupt) 和 EI(Enable Interrupt) 常见于汇编语言中,但在一些C/C++编译环境下也可以通过类似的宏定义实现中断使能/禁用的功能。这主要用于实时操作系统(RTOS)上下文中管理任务间的同步问题。 ```c #pragma inline void disableInterrupt() { __asm__("di"); } #pragma inline void enableInterrupt() { __asm__("ei"); } ``` - **NOP (No Operation)** NOP 表示无操作指令,在程序执行过程中不会做任何事情,但是会消耗一个机器周期的时间。这种指令有时被用来作为延时函数的一部分或是为了保持代码的一致性和可读性而存在。 ```assembly __asm__("nop"); // 插入一条空操作指令 ``` 上述指令的具体语法可能因不同平台和支持程度有所差异,因此建议查阅具体目标架构下的文档资料获取最准确的信息[^1]。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值