解析#pragma指令

使用wxWidgets开发跨平台的GUI程序 使用wxWidgets开发跨平台的GUI程序Taii/回家念经  2006-05-201、探索背景:1.1 引言   从开始使用c/c++编码起算来也快有5年了,期间完成了无数项目,编写了无数程序,而且大部分程序都是同时完成win32/*nix的版本,但是跨平台的都限于win32 console/*nix textmode模式,一直为拘泥于PSDK/MFC而不能很好地完成快速开发c 阅读详情

文章名:解析#pragma指令

作 者:hustli

在所有的预处理指令中,#Pragma 指令可能是最复杂的了,它的作用是设定编译器的状态或者是指示编译器完成一些特定的动作。#pragma指令对每个编译器给出了一个方法,在保持与C和C++语言完全兼容的情况下,给出主机或操作系统专有的特征。依据定义,编译指示是机器或操作系统专有的,且对于每个编译器都是不同的。
其格式一般为: #Pragma Para
其中Para 为参数,下面来看一些常用的参数。

(1)message 参数。 Message 参数是我最喜欢的一个参数,它能够在编译信息输出窗
口中输出相应的信息,这对于源代码信息的控制是非常重要的。其使用方法为:
#Pragma message(“消息文本”)
当编译器遇到这条指令时就在编译输出窗口中将消息文本打印出来。
当我们在程序中定义了许多宏来控制源代码版本的时候,我们自己有可能都会忘记有没有正确的设置这些宏,此时我们可以用这条指令在编译的时候就进行检查。假设我们希望判断自己有没有在源代码的什么地方定义了_X86这个宏可以用下面的方法
#ifdef _X86
#Pragma message(“_X86 macro activated!”)
#endif
当我们定义了_X86这个宏以后,应用程序在编译时就会在编译输出窗口里显示“_
X86 macro activated!”。我们就不会因为不记得自己定义的一些特定的宏而抓耳挠腮了

(2)另一个使用得比较多的pragma参数是code_seg。格式如:
#pragma code_seg( ["section-name"[,"section-class"] ] )
它能够设置程序中函数代码存放的代码段,当我们开发驱动程序的时候就会使用到它。

(3)#pragma once (比较常用)
只要在头文件的最开始加入这条指令就能够保证头文件被编译一次,这条指令实际上在VC6中就已经有了,但是考虑到兼容性并没有太多的使用它。

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

(5)#pragma resource "*.dfm"表示把*.dfm文件中的资源加入工程。*.dfm中包括窗体
外观的定义。

(6)#pragma warning( disable : 4507 34; once : 4385; error : 164 )
等价于:
#pragma warning(disable:4507 34) // 不显示4507和34号警告信息
#pragma warning(once:4385) // 4385号警告信息仅报告一次
#pragma warning(error:164) // 把164号警告信息作为一个错误。
同时这个pragma warning 也支持如下格式:
#pragma warning( push [ ,n ] )
#pragma warning( pop )
这里n代表一个警告等级(1---4)。
#pragma warning( push )保存所有警告信息的现有的警告状态。
#pragma warning( push, n)保存所有警告信息的现有的警告状态,并且把全局警告
等级设定为n。
#pragma warning( pop )向栈中弹出最后一个警告信息,在入栈和出栈之间所作的
一切改动取消。例如:
#pragma warning( push )
#pragma warning( disable : 4705 )
#pragma warning( disable : 4706 )
#pragma warning( disable : 4707 )
//.......
#pragma warning( pop )
在这段代码的最后,重新保存所有的警告信息(包括4705,4706和4707)。
(7)pragma comment(...)
该指令将一个注释记录放入一个对象文件或可执行文件中。
常用的lib关键字,可以帮我们连入一个库文件。

内存数据库FastDB和SQLite性能测评 http://www.chinautopia.com/tech/fastdb-and-sqlite-memory-database-performance-evaluation.html/一、引言在很多项目中,经常会碰到这样的需求,需要对大量数据进行快速存储、查询、删除等操作,特别是在一些针对诸如运营商、银行等大型企业的应用中,这些需求尤为常见。比如智能网中的大量在线并发用户的数据管理 阅读详情

相关推荐

多雷达协同探测技术研究进展:认知跟踪与资源调度算法

源自:雷达学报作者:易伟 袁野 刘光宏 葛建军 孔令讲 杨建宇雷达是信息感知的千里眼,具有极高的军用和民用价值,广泛应用在防空预警、遥感测绘、反恐维稳等领域[1–5]。雷达信息获取与探测技术也一直是大国竞相抢占的前沿技术,同时是信息科学的重要组成部分。随着科学技术不断进步,先进电子对抗装备的不断问世和广泛列装,雷达的生存与发展正面临日益严峻的挑战。从生存环境上看,雷达面临通信等各类民用电磁干扰以及复杂的军用电磁干扰;从探测对象上看,集群、微弱、隐身、高空、低空等多样化目标的出现也给雷达探测与识别带来困难。

renhongxia1的博客 2741

#pragma阻止编译器警告

在xcode6中,如果使用类似以下代码传入nil,会被xcode提示错误 [dataImage setData:nil]; 编译器提示:Null passed to a callee that requires a non-null argument 这是因为在Xcode6.3引入了一个Objective-C的新特性:nullability annotations. 我现在使用的是X

Tyler的专栏 1万+

杭电oj2023题题目详解(Java版)

杭电oj2023题详解

m0_51065958的博客 950

使用#pragma simd进行自动向量化

#pragma simd 该编译指示(SIMD)是12.0编译器最新提供的功能。他可以强制性的让编译器做自动并行化。对于其他编译指示比如#pragma ivdep来说,如果编译器编译时发现用户提供的编译指示条件不满足,那么编译器是不会根据编译指示来进行自动向量化的。也就是说,编译器实际上还是会进行编译时的依赖关系检查。而对于#pargam simd来说,无论编译时条件如何,编译器总是会进

honey_yyang的专栏 8027

『C程序设计』读书笔记

『C程序设计』读书笔记 关键字:c语言原作者姓名:loose_went文章原出处:vczx.com ---http://www.vczx.com/minute_c.php 写在前面:   《C程序设计》可以说是一本再基础不过的编程书了,但每读一遍的感觉却都是不同的,可以说,每读一遍,都会有很多新的收获。真所谓老书再读,回味无穷啊!此笔记是《C程序设计》谭浩强编著,清华大学出版社出版。除了将书中的重

回家念经(kv300)--编程之禅 5918

STL实践指南 Practical Guide to STL

文章标题:STL实践指南Practical Guide to STL(上)原 作 者:Jeff Bogan  译者注 这是一篇指导您如何在Microsoft Visual Studio下学习STL并进行实践的文章。这篇文章从STL的基础知识讲起,循序渐进,逐步深入,涉及到了STL编写代码的方法、STL代码的编译和调试、命名空间(namespace)、STL中的ANSI / ISO字符串、各种不

回家念经(kv300)--编程之禅 2217

qt,c++为什么要进行序列化和反序列化。已经 1 字节对齐 `#pragma pack(1)`,为什么还要 QDataStream?

qt,c++为什么要进行序列化和反序列化。已经 1 字节对齐 `#pragma pack(1)`,为什么还要 QDataStream?

sunflower_2020的博客 69

c语言分支与循环语句

分支决定程序“走哪条路”,循环决定程序“重复多少次”,跳转语句则负责在必要时改变当前执行节奏。掌握这些语句的语法只是起点,更重要的是理解它们的执行顺序、作用范围和边界条件。当你能够熟练地把ifswitchwhilefordo...whilebreak和continue组合起来,就可以从简单的判断题、循环题,逐步写出登录验证、查找算法和交互式小游戏等完整程序。清晰的控制流,是写出可靠 C 程序的基础。

phltxy的博客 168

C++】线程库

本文系统介绍C++多线程编程:涵盖线程创建、join/detach、this_thread;深入讲解互斥锁(普通、递归、超时、自旋)及RAII管理,对比lock_guard与unique_lock;介绍atomic原子操作与CAS无锁编程;最后详解条件变量,包括生产者-消费者模型、核心API及注意事项,并给出交替打印的实现。

wefg1的博客 194

c++信息学竞赛数组大小规划与避坑速查表

做题时先看数据范围,按“最大值+5”的原则开数组;如果是大数组,一律放在全局变量区;遇到极端大数据,果断上。

pxklove1214的博客 341

C语言第八课:指针(二)

本文介绍了指针关键用法:const修饰指针时,在*左侧限制指向内容,右侧限制指针本身;野指针成因包括未初始化、越界、空间释放,需初始化并置NULL规避;assert断言用于运行时检查条件,可用NDEBUG关闭;传址调用能让函数修改实参,如strlen的实现。

2503_93549121的博客 179

C++ 如何优雅解决类的循环依赖?

C++循环依赖导致编译错误,因编译器单遍扫描需完整类型。解法是前置声明、类内只声明函数,类外延后实现。编译器允许不完整类型用作指针、引用及函数原型,待完整定义后填充实现。但仅为语法解耦,更优做法是引入共享状态中间层,消除双向强耦合与生命周期隐患。

Lion_Long的博客 617

C 语言文件操作完全指南:从打开到关闭

《C语言文件操作完全指南》系统讲解了文件I/O的核心流程和关键函数。主要内容包括:1)文件操作四步流程(打开、读写、关闭、指针置空);2)fopen/fclose的使用要点及模式参数详解;3)文本和二进制读写函数(fgetc/fputc、fgets/fputs、fread/fwrite);4)文件定位函数(fseek/ftell)和错误检测方法;5)字符串格式化函数(sprintf/sscanf)的配合使用。特别强调二进制模式与文本模式的区别、文件指针管理、缓冲区安全等易错点,并提供了标准错误处理模板。

Guangyu536的博客 566

【网络编程 Day2】TCP 通信核心:三次握手、核心 API、C/S 架构与粘包问题全梳理

面向连接:通信前必须通过三次握手建立连接,通信结束通过四次挥手断开可靠传输:有确认机制、超时重传、排序、流量控制、拥塞控制,保证数据不丢、不乱、不重复面向字节流:数据被看作连续的字节流,没有消息边界,会出现粘包全双工:同一个连接建立后,双方可以同时发送和接收数据,两条数据流独立TCP 连接有两条独立的数据流(A→B 和 B→A),可以同时收发,互不干扰。同一个 fd 既能调用 send 也能调用 recv,这就是全双工。TCP 是面向字节流的,没有消息边界。

2401_89475491的博客 759

C语言全局区非法调用函数---问题总结

在全局作用域直接调用执行类函数、初始化函数,是典型的低级语法错误。示例错误代码: 二、错误本质 C语言程序执行分为两个阶段:1. 编译加载阶段:先初始化所有全局变量,只允许常量赋值,不支持任何代码执行、函数调用、动态内存操作。2. 运行阶段:进入 main 函数后,才可以执行函数、循环、malloc 等逻辑。全局区没有运行上下文,只能定义变量,不能执行代码。 方式二:将所有初始化、函数调用放到 main 内部 四、核心口诀(永久避坑) 全局只定义,不执行;所有逻辑,全部进函数。越是学高阶

tym23081329的博客 221

SSP2MK_1.2.rar_Windows编程_dongle_eutron_eutron Dongle_eutron.

codigo fonte dongle eutron keysmart

上一篇: Visual C++ MFC 一文说尽
下一篇: 如何在windows程序中读取bios内容
kvw3000
博客等级 码龄23年 11粉丝 54原创
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值