C 語言中的編譯指示 (Pragma)
編譯指示 #pragma 是用來告知編譯器某些特殊指示,例如不要輸出錯誤訊息,抑制警告訊息,或者加上記憶體漏洞檢查機制等。這些指示通常不是標準的 C 語言所具備的,而是各家編譯器廠商或開發者所制定的,以便讓編譯器可以具有某些特殊的選項。
舉例而言,#pragma STDC 就可以用來要求編譯器採用標準 C 的語法進行編譯,只要看到有任何不符合標準 C 的語法,編譯器就會輸出錯誤。
#Pragma message
#ifdef _X86
#Pragma message("_X86 defined") // 在編譯時輸出 _X86 defined
#endif
#Pragma warning
#pragma warning( once:37 43; disable:32; error:17) // 37,43 只警告一次,不警告 32 號資訊,17 號警告視為錯誤
#pragma warning( push ) // 保存目前警告狀態
#pragma warning( once:37 43)
#pragma warning( disable:32 )
#pragma warning( error:17 )
…….
#pragma warning( pop ) // 恢復先前的警告狀態
#pragma warn -100 // Turn off the warning message for warning #100
int insert_record(REC *r) {
…
}
#pragma warn +100 // Turn the warning message for warning #100 back on
#Pragma once
#pragma once // 保證引用檔 (*.h) 只會被引用一次,如此就不需要用「引入防護」了。
Pragma code_seg
#Pragma code_seg(["section-name"][,"section-class"])
#pragma code_seg("INIT") // 設定存放於 INIT 區段,開發驅動程式時會用到
extern"C"
void DriverEntry(…) { … }
#pragma hdrstop
#pragma hdrstop // 表示引用檔編繹到此為止,以加快編譯速度。
#pragma startup
#pragma startup <func> <priority>
#pragma exit <func> <priority>
void india();
void usa() ;
#pragma startup india 105
#pragma startup usa
#pragma exit usa
#pragma exit india 105
void main() { printf("\nI am in main"); getch(); }
void india() { printf("\nI am in india"); getch(); }
void usa() { printf("\nI am in usa"); getch(); }
執行結果
I am in usa
I am in India
I am in main
I am in India
I am in usa
#pragma package(…)
#pragma package(smart_init) // 使用某套編譯指引 (在 BCB 中,根據優先級的大小先後編譯)
#pragma resource "…"
#pragma resource "*.dfm" // 把*.dfm 資源檔加入專案。
#pragma loop_opt(…)
每個編譯程式可以用#pragma指令激活或終止該編譯程式支援的一些編譯功能。例如,對迴圈優化功能:
#pragma loop_opt(on) // 啟動迴圈最佳化
#pragma loop_opt(off) // 停止迴圈最佳化
#pragma asm
#pragma asm // 代表後面寫的是組合語言 (Microsoft)
#pragma small
#pragma small // 使用小記憶體模式 (Microsoft X86)
#pragma registerbank(..)
#pragma registerbank(0) // 使用 8031 處理器中的 bank0 (Keil C)
#pragma code
#pragma code // 表示唯讀資料應儘可能放在 ROM 裡以節省 RAM (Keil C)
參考文獻
- pragma 預處理指令 — http://topalan.pixnet.net/blog/post/22334686
C 語言中的編譯指示 (Pragma)的更多相关文章
- 查看LINQ Expression編譯後的SQL語法(转)
在用了LINQ語法之後的一個月,我幾乎把SQL語法全部拋到腦後了,不過 LINQ好用歸好用,但是實際上操作資料庫的還是SQL語法,如果不知道LINQ語法 編譯過後產生怎樣的SQL語法,一不小心效能就會 ...
- Centos7編譯安裝LAMP平臺
什麽是LAMP? 拆開看 L 就是Linux系統 A是Apache的縮寫 M.P則是MySQL和PHP的简写. 其实就是把Apache, MySQL以及PHP安装在Linux系统上,组成一个环境来运行 ...
- CentOS 7 編譯qBittorrent Web UI安裝指南
前言 以下是安装qBittorrent教学. 适用于CentOS7或更新版本 适用于qBittorrent4.1.5或更新版本 安裝須知 qBittorrent基于libtorrent,所以必须先安装 ...
- windows 安裝 gcc 編譯器 - MinGW
MinGW 介紹 MinGW 全稱 Minimalist GNU For Windows,是個精簡的Windows平台C/C++.ADA及Fortran編譯器,相比Cygwin而言,體積要小很多,使用 ...
- MAC下反編譯安卓APK
所需工具: 1.apktool http://ibotpeaches.github.io/Apktool/ (配置說明) https://bitbucket.org/iBotPeac ...
- 【转】編譯Ogre1.9 IOS Dependencies及Ogre Source步驟及相關注意事項…
http://makedreamvsogre.blogspot.tw/2014/01/ios-dependenciesogre-source.html 可能有人會想問我為什麼要自行編譯IOS Depe ...
- llvm學習(二)————llvm編譯與環境構建
本文由博主原创,转载请注明出处(保留此处和链接): IT人生(http://blog.csdn.net/robinblog/article/details/17339027) 在2011十月份的时候, ...
- make command explaination 編譯命令解釋
Creating .config file make ARCH=arm CROSS_COMPILE=arm-none-eabi- stm32_defconfig 以上命令是 將變數 ARCH=arm, ...
- High-level structure of a simple compiler高級結構的簡單編譯器
1.lexical analysis,which analyzes the character string presented to it and divides it up into tokens ...
随机推荐
- 解决Xcode7 iOS9苹果将原http协议改成了https协议问题
在info.plist 加入key <key>NSAppTransportSecurity</key> <dict> <key>NSAllowsArbi ...
- Java程序打包
包名为 com.longneo.data,主程序入口为:com.longneo.data.AppMain 1.到工程目录下 /bin 执行 jar -cvf Demo.jar com 执行完之后会生成 ...
- iOS 跑马灯 之 TXScrollLabelView
前言 前段时间在开发一个广播的功能,网上也自己找了一些库,没有发现非常好用的,于是自己抽时间写了一个,在 Github 上发布一天收获六十多个 star,这里首先感谢大家在微博上的转发,使得 TXSc ...
- [置顶] flex4事件监听与自定义事件分发(三)
1.我们来说一下自定义事件子类.什么时候创建新的事件类以及怎么创建. (1)说一下,我们什么时候需要自定义事件类.举例说明,在flex中事件的基类是Event,而当我们点击某个按钮或者是单击某个组件的 ...
- 安装apache重启的时候,报错端口被占用,错误1
在cmd中执行以下命令来重新分配. netsh winsock reset. 还不行的话可以重启电脑,再不行就算apache配置文件错误.
- python集合set,frozenset--笔记
<Python3程序开发指南>笔记. python提供了2种内置的集合类型:可变的set类型.固定的frozenset类型. 只有可哈希运算的对象可添加到集合中.可哈希的数据类型:floa ...
- AS 自动生成选择器 SelectorChapek
简介 https://github.com/inmite/android-selector-chapek 设计师给我们提供好了各种资源,每个按钮都要写一个selector是不是很麻烦? 这么这个插件就 ...
- 95秀-异步http请求完整过程
最终调用时的代码 private void ansyClearApplyInfor() { RequestParams params = new RequestParams() ...
- PLSQL编程基础
一 PL/SQL简介 1 SQL:结构化的查询语句 2 PL/SQL优点与特性: 提高运行效率==>>提高运行效率的其他方式(存储过程,分页,缓存,索引) 模块化设计 允许定义标识符(变量 ...
- css书写步骤
CSS整体书写步骤1:CSS RESET 重置2:CSS GLABAL 全局属性3: CSS分模块属性,(先写默认样式和设计图相差最大的部分,先大块布局,后细致调整) <style>/*C ...