/** This is a introduction of how to use pragma. */

 #pragma once /// This is used for include the header once.
/**
Note that this is certain for VS compiler but not certain for other compilers that not support this.
As this is not an orginal C++ standard.
Use #ifndef _GUARD_
#define _GUARD_
#endif // _GUARD_ for a portable program. And if your environment is allowed use #pragma once for first option.
Casue #ifndef-#endif will make preprocessor symbol which will ended in symbol collisions and pollute global namespace.
*/ #pragma comment( [type], "name" ) /// This is to tell the compiler to add certain contents in .obj files.
/**
for type
\compiler put the compiler version and name in .obj, which will be ignored by compiler.
i.o
#pragma comment( compiler ) // no "name" input, or error caused. \exestr put the "name" inside .obj won`t be loaded in memory but will be searched by dumpbin.
i.p
#pragma comment( exestr, "versionCode" ) // you can use this to embeded the version code in your exe files. \lib use this to add lib in your projects.
i.o
#pragma comment( lib, "Gdiplus" ) // which add the Gdiplus.lib for compiler. \linker put link file in your project instead of command line and environment settings.
i.o
#pragma comment( linker, "/include:__mySymbol" ) // use /include to force adding in.
There are also other options
/DEFAULTLIB /EXPORT /INCLUDE /MERGE /SECTION see msdn for details \user put the "name" inside .obj, which will be ignored by compiler.
i.o
#pragma comment( user, "Compiled on"__DATE__" at "__TIME__ ) // put the compile date in .obj
*/ #pragma message( "message text" ) /// This will output text when your compiler process to that part.
/**
In which, this is useful for you to know which kind of header file is included
when you are programming in multi-environments.
*/ #pragma code_seg( [ push | pop ], [ identifier ], "segment-name" | "segment-class" ) /// Define the segment in .obj files.
/**
By default, the segment of a function is put in .text segment.
\push add an record in the stack in compiler by record name or segment.
\pop take the top of the stack in compiler by record name or segment.
\identifier while push, this make you push a record name.
i.o
#pragma code_seg( push, r1, "textOne" )
Which push the function under as the record r1 under .text segment named .textOne
. */ #pragma hdrstop /// Indicate that the pre-compile ended here.
/**
So you can use this to make some head files pre-compiled.
Or you may change the priority of some files whne you used #pragma package( smart_init )
*/ #pragma warning( [ warning-specifier : warning-number-list ]; [ warning-specifier : warning-number-list ] ) /// Modify the warning for compiler.
/**
for waring-specifier
\once warn only once
\disable disable warning
\default reset to default level
\error make warning info as error
i.o
#pragma warning( disable: 4507 64; once: 4385; error: 164 )
#pragma warning( pop ) // pop the last warning info in stack and other modify before this command canceled.
. */ #pragma auto_inline( [ on | off ] ) /// Turn on or of the autoinline function for compiler. #pragma inline_depth( [ 0...255 ] ) /// Used for those function marked inline or _inline to decide times of the function calls expand. #pragma inline_recursion( [ 0...255 ] ) /// Used for those function marked inline or _inline to decide times of the recursive function calls expand.
/** Note that this require /Ob option setted to 1 or 2 for compiler. */ #pragma init_seg( [ compiler | lib | user ], "section-name" | "func-name" ) /// Specifies a keyword or code section that affects the order in which startup code is executed.
/**
This is useful for 3rd-party dlls whick requiring initialization.
\compiler remain Microsof C run-time order. Constructed first.
\lib marked as compiler and before any others.
\user available to any users but construted last.
*/

以上是从网上搜集的关于 #pragma 的一些用法和注意事项,还参考了部分的 msdn.

个人觉得最常用的还是 #pragma once 和 #pragma comment 不过真的碰到多环境的情况用一用 #pragma message 也不错XD.

关于Pragma的更多相关文章

  1. #pragma once与#ifndef #define ...#endif的区别

    1. #pragma once用来防止某个头文件被多次include: #ifndef,#define,#endif用来防止某个宏被多次定义.   2. #pragma once是编译相关,就是说这个 ...

  2. 预处理指令#pragma

    #pragma介绍 #pragma是一个预处理指令,pragma的中文意思是『编译指示』.它不是Objective-C中独有的东西(貌似在C/C++中使用比较多),最开始的设计初衷是为了保证代码在不同 ...

  3. 关于 Pragma 的使用总结

    注意:此文乃是本人阅读多个博客文章后,记下的个人认为重点的地方. 参考文章: 参考1   参考2 #Pragma mark - 用于分离类中的不同功能的方法.(例如,一个 viewController ...

  4. IAR #pragma vector 中断入口地址

    在IAR编译器里用关键字来__interrupt来定义一个中断函数.用#pragma vector来提供中断函数的入口地址. #pragma vector = 0x12    //定时器0溢出中断入口 ...

  5. #pragma pack(push,1)与#pragma pack(1)的区别

    这是给编译器用的参数设置,有关结构体字节对齐方式设置, #pragma pack是指定数据在内存中的对齐方式. #pragma pack (n)             作用:C编译器将按照n个字节对 ...

  6. 你可能不知道的iOS冷知识——#pragma

    Mattt Thompson撰写. Zihan Xu翻译. 发布于2012年10月1日 #pragma 声明是彰显 Objective-C 工艺的标志之一.虽然 #pragma 最初的目的是为了使得源 ...

  7. pragma

    在所有的预处理指令中,#pragma指令可能是最复杂的了,它的作用是设定编译器的状态或者是指示编译器完成一些特定的动作.#pragma指令对每个 编译器给出了一个方法,在保持与C和C++语言完全兼容的 ...

  8. 关于#pragma once和#ifndefine组合的区别

    最近在看duilib代码,发现头文件既有#pragma once 又有 #ifndefine...#define,忽然就觉得有点不解,因为据我所知这两者都是防止头文件二次包含的. 经过下面两位的解释后 ...

  9. Pragma如何分组

    Pragma Pragma Mark #pragma mark - 是一个在类内部组织代码并且帮助你分组方法实现的好办法. 我们建议使用 #pragma mark - 来分离: 不同功能组的方法 pr ...

  10. 【C语言】pragma

    ① #pragma comment (lib, "libgsl.a") 这是告诉编译器在编译形成的.obj文件和.exe文件中加一条信息,使得 链接器在链接库的时候要去找libgs ...

随机推荐

  1. python 实例方法、静态方法、类方法

    class Date: #构造函数 def __init__(self, year, month, day): self.year = year self.month = month self.day ...

  2. attention 汇总(持续)

    Seq2seq Attention Normal Attention 1.  在decoder端,encoder state要进行一个线性变换,得到r1,可以用全连接,可以用conv,取决于自己,这里 ...

  3. Core源码(二) Linq的Distinct扩展

    先贴源码地址 https://github.com/dotnet/corefx/tree/master/src/System.Linq/src .NET CORE很大一个好处就是代码的开源,你可以详细 ...

  4. ASP.NET MVC IOC依赖注入之Autofac系列开篇

    Autofac为IOC组件,实现控制反转,主要结合面向接口编程,完成较大程度的解耦工作. 使用IOC,必须面向接口编程,所谓的面向接口编程,即程序中依赖于抽象,而不依赖于具体实现. 需要所有的业务逻辑 ...

  5. File操作,访问文件或目录的属性信息

    package seday03; import java.io.File;//记得导入File /** * File的每一个实例用于表示文件系统中的一个文件或目录 * 使用File可以: *  1:访 ...

  6. Java并发编程杂记(2)

    对象共享 synchronized 设定原子性确定临界区 + 内存可见性 要解决如下问题 防止一个线程在使用对象状态而另一个线程在修改对象状态:且当一个线程修改了对象状态后,对其他线程可见.   可见 ...

  7. c# jetbrains rider使用一段时间后

    先上一个官方的对比图吧.https://www.jetbrains.com/rider/compare/rider-vs-visual-studio/index.html 功能上直接超越visual ...

  8. python : html 调用本地python程序

    <!DOCTYPE html> <html> <head> <meta charset="gb2312"> <title> ...

  9. XCode证书问题

    1. 确认下证书是不是开发证书,如果是发布证书就会出现这样的提示. 2. 证书失效了,去开发者中心重新生成一个. 3. 包标识符不与描述文件包含的包标识符不一致,按照它的提示换一下就好了,最好不要点 ...

  10. 我所认为的RESTful API最佳实践

    我所认为的RESTful API最佳实践 不要纠结于无意义的规范 在开始本文之前,我想先说这么一句:RESTful 真的很好,但它只是一种软件架构风格,过度纠结如何遵守规范只是徒增烦恼,也违背了使用它 ...