/** 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. Unity 利用Cinemachine快速创建灵活的相机系统

    在第一或第三人称ACT和FPS游戏中,相机的运动需求是多种多样的,Unity内置的Cinemachine包可以助你快速实现不同相机功能,例如范围追踪,边界设置等. 例如,考虑这样一个功能,这在很多游戏 ...

  2. 登录注册案例(Servlet+JSP+Maven)

    项目案例模板之登录注册的实现 案例演示 案例代码 设计表 pom.xml  <dependencies>  <dependency>    <groupId>jun ...

  3. node.js中this指向失效解决

    问题:在外部单独使用类实例对象的方法,this没有指向该类实例对象 代码如下 class CQH { hello() { let name = this.name(); console.log(`He ...

  4. NGINX 配置清单

    以下内容来自 SimulatedGREG/nginx-cheatsheet. 通用设置 端口 listen server { # standard HTTP protocol listen 80; # ...

  5. 在python中实现随机选择

    想从一个序列中随机抽取若干元素,或者想生成几个随机数. random 模块有大量的函数用来产生随机数和随机选择元素.比如,要想从一个序列中随机的抽取一个元素,可以使用random.choice() : ...

  6. Java日期时间API系列4-----Jdk7及以前的日期时间类的线程安全问题

    1.Date类为可变的,在多线程并发环境中会有线程安全问题. (1)可以使用锁来处理并发问题. (2)使用JDK8  Instant 或 LocalDateTime替代. 2.Calendar的子类为 ...

  7. 848. Shifting Letters

    问题描述: 问题规约为:对每一个数组S,移动(shifts[0] + shitfs[1]+...+shitfs[i] )mod 26位 def shiftingLetters(self, S: str ...

  8. 将网站发布到阿里云的Linux服务器上(简述)

    这里以idea的springboot项目为例(打成jar包) 这里去阿里云购买服务器的过程就不说了,自行百度 还有这篇只是简述,因为把一个项目部署到服务器要做的事情还是不少的,然后没学过Linux的建 ...

  9. 2019 Multi-University Training Contest 1 E Path(最短路+最小割)

    题意 链接:https://vjudge.net/problem/HDU-6582 给定一个有向图,可以有重边,每条边上有一个权值表示删掉这条边的代价,问最少花费多少代价能使从s到t节点的最短路径增大 ...

  10. 自定义MVC二

    1. 什么是MVC MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写, 它是一种软件设计典范,用一种业务逻辑.数据. ...