关于Pragma
/** 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的更多相关文章
- #pragma once与#ifndef #define ...#endif的区别
1. #pragma once用来防止某个头文件被多次include: #ifndef,#define,#endif用来防止某个宏被多次定义. 2. #pragma once是编译相关,就是说这个 ...
- 预处理指令#pragma
#pragma介绍 #pragma是一个预处理指令,pragma的中文意思是『编译指示』.它不是Objective-C中独有的东西(貌似在C/C++中使用比较多),最开始的设计初衷是为了保证代码在不同 ...
- 关于 Pragma 的使用总结
注意:此文乃是本人阅读多个博客文章后,记下的个人认为重点的地方. 参考文章: 参考1 参考2 #Pragma mark - 用于分离类中的不同功能的方法.(例如,一个 viewController ...
- IAR #pragma vector 中断入口地址
在IAR编译器里用关键字来__interrupt来定义一个中断函数.用#pragma vector来提供中断函数的入口地址. #pragma vector = 0x12 //定时器0溢出中断入口 ...
- #pragma pack(push,1)与#pragma pack(1)的区别
这是给编译器用的参数设置,有关结构体字节对齐方式设置, #pragma pack是指定数据在内存中的对齐方式. #pragma pack (n) 作用:C编译器将按照n个字节对 ...
- 你可能不知道的iOS冷知识——#pragma
Mattt Thompson撰写. Zihan Xu翻译. 发布于2012年10月1日 #pragma 声明是彰显 Objective-C 工艺的标志之一.虽然 #pragma 最初的目的是为了使得源 ...
- pragma
在所有的预处理指令中,#pragma指令可能是最复杂的了,它的作用是设定编译器的状态或者是指示编译器完成一些特定的动作.#pragma指令对每个 编译器给出了一个方法,在保持与C和C++语言完全兼容的 ...
- 关于#pragma once和#ifndefine组合的区别
最近在看duilib代码,发现头文件既有#pragma once 又有 #ifndefine...#define,忽然就觉得有点不解,因为据我所知这两者都是防止头文件二次包含的. 经过下面两位的解释后 ...
- Pragma如何分组
Pragma Pragma Mark #pragma mark - 是一个在类内部组织代码并且帮助你分组方法实现的好办法. 我们建议使用 #pragma mark - 来分离: 不同功能组的方法 pr ...
- 【C语言】pragma
① #pragma comment (lib, "libgsl.a") 这是告诉编译器在编译形成的.obj文件和.exe文件中加一条信息,使得 链接器在链接库的时候要去找libgs ...
随机推荐
- Leetcode练习题Search Insert Position
Question: Given a sorted array and a target value, return the index if the target is found. If not, ...
- Shell脚本中的while getopts用法小结
getpots是Shell命令行参数解析工具,旨在从Shell Script的命令行当中解析参数.getopts被Shell程序用来分析位置参数,option包含需要被识别的选项字符,如果这里的字符后 ...
- 用Scriban进行模版解析
前言 有些时候,我们需要根据模版去展示一些内容,通常会借助模版引擎来处理. 举个简单的例子,发短信. 短信肯定是有模版的,不同的场景对应不同的模版. 注册的, [xxx]恭喜您成功注册yyy平台,您的 ...
- OpenGL入门1.5:矩阵与变换
每一个小步骤的源码都放在了Github 的内容为插入注释,可以先跳过 前言 在阅读本篇博客之前,你必须对向量和矩阵有基本的认识,并且能熟练进行向量和矩阵的运算 我们已经知道了如何创建一个物体.着色.加 ...
- 面试官,我会写二分查找法!对,没有 bug 的那种!
前言科普 第一篇二分搜索论文是 1946 年发表,然而第一个没有 bug 的二分查找法却是在 1962 年才出现,中间用了 16 年的时间. 2019 年的你,在面试的过程中能手写出没有 bug 的二 ...
- 死磕 java同步系列之Semaphore源码解析
问题 (1)Semaphore是什么? (2)Semaphore具有哪些特性? (3)Semaphore通常使用在什么场景中? (4)Semaphore的许可次数是否可以动态增减? (5)Semaph ...
- 无法打开锁文件 /var/lib/dpkg/lock-frontend - open
转自:https://blog.csdn.net/sinat_29957455/article/details/89036005 在使用apt-get安装程序的时候报: E: 无法打开锁文件 /var ...
- 用一个bat文件调用另外两个bat文件,当1.bat执行完后再执行2.bat
用一个bat文件调用另外两个bat文件,当1.bat执行完后再执行2.bat 摘自:https://zhidao.baidu.com/question/492732911.html @echo off ...
- C# Dictionary增加的方法
1.简单的函数,实现Dictionary如果有就替换,没有就增加的功能. /// <summary> /// Dictionary增加的方法 /// </ ...
- push和pop的区别?
1.push是什么?(推进) push就是推,延伸为推进.这个它是汇编的一个指令,(在其它语言中也可能会见到它).意思都是差不多的,就是把一个元素放入栈中.你可以假想栈是一个放光盘的那种盒子,有底没盖 ...