为什么80%的码农都做不了架构师?>>>   

转自:http://hi.baidu.com/todaygoodhujun/blog/item/702eb751ef45b218367abef6.html

Usage of #pragma
在所有的预处理指令中,#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关键字,可以帮我们连入一个库文件。

12:31 添加评论 固定链接 引用通告 (0) 记录它 计算机与 Internet
固定链接http://skhpluto.spaces.live.com/blog/cns!2E768776DBB2FA33!116.entry
添加评论size_t
size_t 的定义- -

按照 The C programming langusrage (second edition) A7.4.8 章节, size_t 在标准头文件stddef.h中被定义为 unsigned int, 但是在redhat 9.0 中并没有发现它的定义, 找了找, 发现size_t类型跟体系结构相关!
它的定义在: /usr/include/linux/types.h
typedef __kernel_size_t size_t;
而 __kernel_size_t 定义在 /usr/include/asm/posix_types.h
typedef unsigned int __kernel_size_t;
不同体系结构参看内核源码, 比如
asm-i386/posix_types.h
typedef unsigned int __kernel_size-t;
asm-ia64/posix_types.h:
typedef unsigned long __kernel_size_t;

转载于:https://my.oschina.net/dake/blog/196770

Usage of #pragma相关推荐

  1. IOS笔记 #pragma mark的用法

    简单的来说就是为了方便查找和导航代码用的. 下面举例如何快速的定位到我已经标识过的代码. #pragma mark 播放节拍器 - (void) Run:(NSNumber *)tick { //.. ...

  2. #pragma pack(n) 的作用

    在C语言中,结构是一种复合数据类型,其构成元素既可以是基本数据类型(如int.long.float等)的变量,也可以是一些复合数据类型(如数组.结构.联合等)的数据单元.在结构中,编译器为结构的每个成 ...

  3. CUDA Samples: Streams' usage

    以下CUDA sample是分别用C++和CUDA实现的流的使用code,并对其中使用到的CUDA函数进行了解说,code参考了<GPU高性能编程CUDA实战>一书的第十章,各个文件内容如 ...

  4. 【数据库】sqlite中PRAGMA命令说明

    关于sqlite中PRAGMA的说明网上已经有很多了,这里不再复制粘贴,只把内容最全的网址连接记录一下: 官网说明(英文):https://sqlite.org/pragma.html 中文翻译,参见 ...

  5. #pragma pack 内存对齐

    1. 用法 #pragma pack是C/C++里面设置字节对齐方式的预编译函数 2. 解释 先看下面代码: #include <iostream> using namespace std ...

  6. #pragma once与#ifndef的区别

    #pragma once 和 #ifdef 都可以避免同一个文件被include多次,但二者的含义略有不同. 1. #pragma once方式 1.1. 使用方法 #pragma once// co ...

  7. #pragma once与#ifndef

    在C/C++中,在使用预编译指令#include的时候,为了防止重复引用造成二义性的两种方法. #ifndef 它不光可以保证同一份文件不会被包含两次,也能够保证不同文件完全相同的内容不会被包含两次. ...

  8. C/C++ 头文件 #pragma once vs #ifndef

    C/C++ 头文件防止被重复包含有2种常用的做法,一种是传统的ifndef: #ifndef HEADER_H #define HEADER_H...#endif // HEADER_H 另一种是稍微 ...

  9. Redis报错解决The TCP backlog setting of 511 cannot be enforced和This will create latency and memory usage

    在启动Redis的时候报错如下: 16426:M 04 May 10:30:43.721 # WARNING: The TCP backlog setting of 511 cannot be enf ...

  10. #pragma once与 #ifndef的区别

    2019独角兽企业重金招聘Python工程师标准>>> 为了避免同一个文件被include多次 1   #ifndef方式 2   #pragma once方式 在能够支持这两种方式 ...

最新文章

  1. Linux内核--网络栈实现分析(二)--数据包的传递过程--转
  2. 读书笔记:《HTML5开发手册》--figure、time、details、mark
  3. kafka同一个gruopid下多个consumer订阅同一个topic,只有一个consumer能消费到数据
  4. apply与applymap的区别
  5. php 发那科,FANUC发那科CNC数据采集教程连接CNC
  6. 算法和时间复杂度概念(一级)
  7. 获取输出最大角标 php,html实现消息按钮上的数量角标的实例详解
  8. 投影仪光源与亮度科普
  9. 【UiBot干货】UiBot屏幕锁屏常见的7个问题
  10. 计算机怎么样返回桌面,电脑如何快速返回桌面
  11. 基于SVM支持向量机的车牌分割识别算法matlab仿真
  12. bzoj1375 双调路径
  13. nagios配置示例
  14. 完全教程 Aircrack-ng破解WEP、WPA-PSK加密利器 [MARK]
  15. IDEA下搭建分布式开发环境
  16. 直播平台源码实现状态栏滑动隐藏和tabbar的教程
  17. (毕业设计资料)基于51单片机的公交自动报站系统
  18. CAN通讯程序C语言,CAN通讯协议C语言程序
  19. 高视医疗在港交所招股:IPO募资要用于贷款,高铁塔为控股股东
  20. miniUI实现tab切换时显示隐藏菜单栏

热门文章

  1. Mac下Eclipse内置Tomcat端口被占用问题的解决办法
  2. linux找不到mysql服务_linux mysql 找不到 mysql/mysql.h
  3. 制造行业IT运维管理解决方案
  4. 最小生成树模板 加 例题分析 (最小生成树类型汇总)
  5. 关于内存泄漏检测问题,和大家一起分享
  6. Java虚拟机类加载机制浅谈
  7. 《精通Unix下C语言编程与项目实践》读书笔记(2)
  8. 典型信息化案例点评(2)
  9. QT编译静态库与动态库
  10. arm linux 内存压力测试,嵌入式中如何给内存做压力测试?