关于#pragma 和 _pragma】的更多相关文章

C90为预处理指令家族带来一位新成员:#pragma.一般情况下,大家很少见到它.        #pragma的作用是为特定的编译器提供特定的编译指示,这些指示是具体针对某一种(或某一些)编译器的,其他编译器可能不知道该指示的含义又或者对该指示有不同的理解,也即是说,#pragma的实现是与具体平台相关的.        为了让大家了解#pragma的用法,这里暂时以HP C Compiler为例子.HP C编译器主要运行在HP-UX平台上,它的一般用法和gcc大致相同,例如要编译程序:   …
首先要明确 #pragma 和_Pragma 是什么 这两个都是出自于c/c++ 的 ,其中#pragma 是预处理指令(preProcess directive ) ,#pragma是用来向编译器传达语言标准以外的一些信息. : _Pragma操作符,该操作符具有与 #pragma 指令相同的功能 _Pragma(token-string) 相比预处理指令#pragma,_Pragma操作符可用于宏定义中的内联. #pragma 指令不能用于宏定义中,因为编译器会将指令中的数字符号("#&qu…
因为偶然的机会,在图书馆看到<深入理解C++ 11:C++11新特性解析和应用>这本书,大致扫下,受益匪浅,就果断借出来,对于其中的部分内容进行详读并亲自编程测试相关代码,也就有了整理写出这篇读书笔记的基础.C++作为踏入编程的最初语言,一直充满感情,而C++11作为新标准虽然推出一段时间了,却因为总总原因直到现在才去开始真正了解,不过一句话回荡在脑中:当你认为为时已晚的时候,恰恰是最早的时候!从C++98到C++11, C++11标准经历了10几年的沉淀,以全新的姿态迎接新的挑战,长话短说,…
Gcc的编译流程分为了四个步骤: 预处理,生成预编译文件(.文件):gcc –E hello.c –o hello.i 编译,生成汇编代码(.s文件):gcc –S hello.i –o hello.s 汇编,生成目标文件(.o文件):gcc –c hello.s –o hello.o 链接,生成可执行文件:gcc hello.o –o hello 一.预处理 预编译程序读出源代码,对其中内嵌的指示字进行响应,产生源代码的修改版本,修改后的版本会被编译程序读入. 在 GNU 术语中,预处理程序叫…
1.1 __func__预定义标识符 在c99中,__func__基本功能是返回所在函数的名字,c++11中允许使用在类或结构体中. #include <iostream> using namespace std; struct TestStruct { TestStruct() : name(__func__) {} const char *name; }; int main() { TestStruct ts; cout << ts.name << endl; ;…
原文网址:http://blog.csdn.net/lizzywu/article/details/9419145 各个层次的gcc警告从上到下覆盖 变量(代码)级:指定某个变量警告 int a __attribute__ ((unused));指定该变量为"未使用的".即使这个变量没有被使用,编译时也会忽略则个警告输出. 文件级:在源代码文件中诊断(忽略/警告) 语法: #pragma GCC diagnostic [error|warning|ignored] "-W&l…
作为第一篇,首先要说一下C++11与C99的兼容性. C++11将 对以下这些C99特性的支持 都纳入新标准中: 1) C99中的预定义宏 2) __func__预定义标识符 3) _Pragma操作符 4) 不定参数宏定义以及__VA_ARGS__ 5) 宽窄字符串连接 这些特性并不像语法规则一样常用,并且有的C++编译器实现也都先于标准地将这些特性实现,因此可能大多数程序员没有发现这些不兼容.但将这些C99的特性在C++11中标准化无疑可以更广泛地保证两者的兼容性.我们来分别看一下. 这次,…
1. #pragma once用来防止某个头文件被多次include: #ifndef,#define,#endif用来防止某个宏被多次定义.   2. #pragma once是编译相关,就是说这个编译系统上能用,但在其他编译系统不一定可以,也就是说移植性差,不过现在基本上已经是每个编译器都有这个定义了: #ifndef,#define,#endif这个是C++语言相关,这是C++语言中的宏定义,通过宏定义避免文件多次编译.所以在所有支持C++语言的编译器上都是有效的,如果写的程序要跨平台,最…
#pragma介绍 #pragma是一个预处理指令,pragma的中文意思是『编译指示』.它不是Objective-C中独有的东西(貌似在C/C++中使用比较多),最开始的设计初衷是为了保证代码在不同编译器之间的兼容性,但随着时间推移,它出现在了更多更丰富的应用场景中. #pragma代码是在编译期间处理的:它既不属于注释,也不属于逻辑代码的一部分:并且它和其他预处理命令譬如#ifdef ... #endif不同,它不会影响代码在运行时的逻辑处理,所以#pragma指令丝毫不会影响到程序在运行时…
注意:此文乃是本人阅读多个博客文章后,记下的个人认为重点的地方. 参考文章: 参考1   参考2 #Pragma mark - 用于分离类中的不同功能的方法.(例如,一个 viewController 一般需要这样划分) #pragma mark - life cycle - (void)dealloc { // [super dealloc]; } - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup aft…
在IAR编译器里用关键字来__interrupt来定义一个中断函数.用#pragma vector来提供中断函数的入口地址. #pragma vector = 0x12    //定时器0溢出中断入口地址__interrupt void time0(void){ ;}上面的入口地址写成#pragma vector=TIMER0_OVF_vect更直观,每种中断的入口地址在头文件里有描述.函数名称time0可以为任意名称.中断函数会自动保护局部变量,但不会保护全局变量.…
这是给编译器用的参数设置,有关结构体字节对齐方式设置, #pragma pack是指定数据在内存中的对齐方式. #pragma pack (n)             作用:C编译器将按照n个字节对齐.#pragma pack ()               作用:取消自定义字节对齐方式. #pragma  pack (push,1)     作用:是指把原来对齐方式设置压栈,并设新的对齐方式设置为一个字节对齐 #pragma pack(pop)            作用:恢复对齐状态 因…
Mattt Thompson撰写. Zihan Xu翻译. 发布于2012年10月1日 #pragma 声明是彰显 Objective-C 工艺的标志之一.虽然 #pragma 最初的目的是为了使得源代码在不同的编译器下兼容的,但精明的Xcode编码器将 #pragma 使用到了极致. 在现在的背景下,#pragma 避开了注释和代码之间的界限.作为预处理指令,#pragma 在编译时进行计算.但它并不像如 #ifdef...#endif 之类的宏,#pragma 的使用方式不会改变你的应用运行…
在所有的预处理指令中,#pragma指令可能是最复杂的了,它的作用是设定编译器的状态或者是指示编译器完成一些特定的动作.#pragma指令对每个 编译器给出了一个方法,在保持与C和C++语言完全兼容的情况下,给出主机或操作系统专有的特征.依据定义,编译指示是机器或操作系统专有的,且对于每个 编译器都是不同的.其格式一般为:#pragma para,其中para为参数,下面来看一些常用的参数. (Each   implementation   of   C   and   C++   suppor…
最近在看duilib代码,发现头文件既有#pragma once 又有 #ifndefine...#define,忽然就觉得有点不解,因为据我所知这两者都是防止头文件二次包含的. 经过下面两位的解释后,加深了认识: http://www.cnblogs.com/Braveliu/archive/2012/12/29/2838726.html http://blog.csdn.net/zlhy_/article/details/8192580 总结一下: 1.#pragma是微软独有的,不能跨平台…
Pragma Pragma Mark #pragma mark - 是一个在类内部组织代码并且帮助你分组方法实现的好办法. 我们建议使用 #pragma mark - 来分离: 不同功能组的方法 protocols 的实现 对父类方法的重写 - (void)dealloc { /* ... */ } - (instancetype)init { /* ... */ } #pragma mark - View Lifecycle (View 的生命周期) - (void)viewDidLoad {…
① #pragma comment (lib, "libgsl.a") 这是告诉编译器在编译形成的.obj文件和.exe文件中加一条信息,使得 链接器在链接库的时候要去找libgsl.a这个库,不要先去找别的库. 加入这条语句后,就不需要把libgsl.a这个文件额外通过链接器加入到工程里了. #pragma comment( comment-type ,["commentstring"] ) comment-type是一个预定义的标识符,指定注释的类型,应该是co…
>>>layoutSubviews: layoutSubviews是对sbuviews的重新布局,比如,我们想更新子视图的位置,可以通过调用layoutSubviews方法(不能直接调用) layoutSubviews默认不做任何事,用到时,需要在子类中重写 layoutSubviews以下情况会被调用: 直接调用setLayoutSubviews addSubview时 当view的frame发生改变时 滑动UIScrollView时 旋转screen会触发父UIView上的layou…
转自 http://blog.csdn.net/pan_tian/article/details/7675800 这段时间遇到一个问题,程序里明明插入了一条记录,但在后边的一段Procedure中却查不到刚刚插入的记录,最后发现这个Procedure的定义中加入了PRAGMA AUTONOMOUS_TRANSACTION. PRAGMA AUTONOMOUS_TRANSACTION中文翻译过来叫“自治事务”(翻译的还算好理解),对于定义成自治事务的Procedure,实际上相当于一段独立运行的程…
  为了避免同一个文件被include多次 1   #ifndef方式2   #pragma once方式 在能够支持这两种方式的编译器上,二者并没有太大的区别,但是两者仍然还是有一些细微的区别.    方式一:     #ifndef __SOMEFILE_H__    #define __SOMEFILE_H__    ... ... // 一些声明语句    #endif     方式二:     #pragma once    ... ... // 一些声明语句     #ifndef的…
#pragma pack(n) 重要规则: 1,复杂类型中各个成员按照它们被声明的顺序在内存中顺序存储,第一个成员的地址和整个类型的地址相同: 2,每个成员分别对齐,即每个成员按自己的方式对齐,并最小化长度:规则就是每个成员按其类型的对齐参数(通常是这个类型的大小)和指定对齐参数中较小的一个对齐(对于单个char出现时,必须为2的整数倍,比如n=2时,char 占一位,但是后面有一位空:char [2],直接存储,不空位): 3,结构.联合或者类的数据成员,第一个放在偏移为0的地方:以后每个数据…
原文地址:http://www.cnblogs.com/CBDoctor/archive/2013/01/26/2878201.html 1)#pragma data_seg()一般用于DLL中.也就是说,在DLL中定义一个共享的,有名字的数据段.最关键的是:这个数据段中的全局变量可以被多个进程共享.否则多个进程之间无法共享DLL中的全局变量. 2)共享数据必须初始化,否则微软编译器会把没有初始化的数据放到.BSS段中,从而导致多个进程之间的共享行为失败. 3)你所谓的结果正确是一种错觉.如果你…
为了能够快速定位到代码的目标位置,可以使用#pragma:  …
看到一些零星的知识片,今天就用自己的理解说明下,也是因为太简单了,一下就过的,也是我们日常开发中常用.留下一个脚印,当书不在手上的,也能翻出来看看.说下属性访问器.命名空间和pragma指令. 属性访问器在01.C#数据类型.排序.过滤(一章1.1-1.2)有所提到,在C#3后可以使用修饰符去修饰属性的取值和赋值,也可以使用加入一些验证,如下: class Plant { private double Height = 0.0; //是否需要修剪 public bool canTrim { ge…
1.#include <stdio.h>#if defined(ANDROID20)    #pragma message("Compile Android SDK 2.0...")    #define VERSION "Android 2.0"#elif defined(ANDROID23)    #pragma message("Compile Android SDK 2.3...")    #define VERSION &q…
一般情况下,#pragma message( messagestring )是在编译期间,将一个文字串(messagestring)发送到标准输出窗口.典型的使用方法是在编译时报告和显示信息.下面的代码段是编译期间在标准输出窗口显示一条消息: #if _M_IX86 == 500#pragma message( "Pentium processor build" )#endif messagestring 参数可以将文字串常量扩展成一个宏,从而可以显示任何形式的字符串.例如,下面的语句…
#pragma 的使用 尽管 C 和 C++ 都已经有标准,但是几乎每个编译器 (广义,包含连接器等) 扩展一些 C/C++ 关键字. 合理地应用这些关键字,有时候能使我们的工作非常方便.下面随便说说 Visual C++ 中 #pragma 指示符的使用. 一.用#pragma导出DLL函数     传统的到出 DLL 函数的方法是使用模块定义文件 (.def),Visual C++ 提供了更简洁方便的方法, 那就是“__declspec()”关键字后面跟“dllexport”,告诉连接去要导…
bmp.c:8: warning: malformed '#pragma pack(push[, id], <n>)' - ignored bmp.c:33: warning: #pragma pack (pop) encountered without matching #pragma pack (push, <n>) 这个警告很重要不能忽略,我遇到的这个问题适用于编译器比较老的,因为韦东山自带的虚拟机Ubuntu9.10用的是/work/tools/gcc- 3.4.5 -gl…
#pragma mark - 合成图 - (UIImage *)getShareImageShell:(UIImage *)shareImage { if (shareImage) { CGSize size = CGSizeMake(640, 1084); //      UIGraphicsBeginImageContextWithOptions(outputSize, NO, 0.5);设置透明 质量系数 UIGraphicsBeginImageContext(size); CGConte…
pragma伪指令 通过pragma伪指令告诉编译器如何对待特定的函数.对象或代码段.TMS320C28x C/C++编译器支持如下形式的pragma伪指令: CODE_SECTION(func,“section name”): DATA_SECTION(symbol,“section name”): 注意:func和symbol必须在函数外声明或定义.同时,pragma伪指令也必须在函数外,且位于声明.定义或引用func和symbol之前,否则,编译器会给出警告信息. CODE_SECTION…