C語言#pragma指令用法
引導語:在所有的預處理指令中,#Pragma指令可能是最複雜的了,它的作用是設定編譯器的狀態或者是指示編譯器完成一些特定的動作。以下是本站小編分享給大家的C語言#pragma指令用法,歡迎閲讀!
#pragma
#pragma GCC dependency 文件名
表示當前文件依賴於指定的文件,如果當前文件的最後一次,修改的時間早於依賴的文件,則產生警告信息
#include
//當前程序依賴於01print.c文件
#pragma GCC dependency "01print.c"
int main(void)
{
printf("Good Good Study,Day Day Up!n");
return 0;
}
輸出結果:
致命錯誤: 01print.c:沒有那個文件或目錄
編譯中斷。
#pragma GCC poison 標示符
表示將後面的標示符設置成毒藥,一旦使用標示符,則產生錯誤或警告信息
//毒藥的設置
#include
//#define GOTO goto
//將goto設置為毒藥
#pragma GCC poison goto
int main(void)
{
//GOTO ok;
goto ok;
printf("main函數開始n");
ok:
printf("main函數結束n");
return 0;
}
輸出結果:
錯誤: 試圖使用有毒的“goto”
#pragma pack (整數n)
表示按照整數n倍進行補齊和對齊
//設置結構體的對齊和補齊方式
#include
//設置結構體按照2的整數倍進行對齊補齊
#pragma pack(2) //8
//#pragma pack(1) //6
//#pragma pack(3) //error
//char short int long int long long
int main(void)
{
struct S
{
char c1;
int i;
char c2;
};
printf("sizeof(struct S) = %dn",sizeof(struct S));//12
return 0;
}
輸出結果:
sizeof(struct S) = 8
#pragma message
message 參數: message 參數是我最喜歡的一個參數,它能夠在編譯信息輸出窗,口中輸出相應的信息,這對於源代碼信息的控制是非常重要的。其使用方法為:
#pragma message(“消息文本”)
當編譯器遇到這條指令時就在編譯輸出窗口中將消息文本打印出來。當我們在程序中定義了許多宏來控制源代碼版本的時候,我們自己有可能都會忘記有沒有正確的設置這些宏,此時我們可以用這條指令在編譯的時候就進行檢查。假設我們希望判斷自己有沒有在源代碼的什麼地方定義了_X86 這個宏可以用下面的方法.
#define _X86
#ifdef _X86
#pragma message ("_X86 macro activated!")
#endif
輸出結果:
附註: #pragma message:_X86 macro activated!
當我們定義了_X86 這個宏以後,應用程序在編譯時就會在編譯輸出窗口裏顯示“_X86 macro activated!”。我們就不會因為不記得自己定義的一些特定的宏而抓耳撓腮了.
#pragma code_seg
另一個使用得比較多的 pragma 參數是 code_seg。格式如:
#pragma code_seg( ["section-name"[,"section-class"] ] )
它能夠設置程序中函數代碼存放的代碼段,當我們開發驅動程序的時候就會使用到它。
#pragma once
#pragma once (比較常用)
只要在頭文件的最開始加入這條指令就能夠保證頭文件被編譯一次,這條指令實際上在Visual C++6.0 中就已經有了,但是考慮到兼容性並沒有太多的使用它。
#pragma hdrstop
#pragma hdrstop 表示預編譯頭文件到此為止,後面的頭文件不進行預編譯。 BCB 可以預編譯頭文件以加快鏈接的速度,但如果所有頭文件都進行預編譯又可能佔太多磁盤空間,所以使用這個選項排除一些頭文件。有時單元之間有依賴關係,比如單元 A 依賴單元 B,所以單元 B 要先於單元 A 編譯。你可以用#pragma startup 指定編譯優先級,如果使用了#pragma package(smart_init) , BCB就會根據優先級的大小先後編譯。
#pragma resource
#pragma resource "*"表示把* 文件中的資源加入工程。 * 中包括窗體外觀的'定義。
#pragma warning
#pragma warning( disable : 4507 34; once : 4385; error : 164 )
等價於:
#pragma warning(disable:4507 34) // 不顯示 4507 和 34 號警告信息
#pragma warning(once:4385) // 4385 號警告信息僅報告一次
#pragma warning(error:164) // 把 164 號警告信息作為一個錯誤。
同時這個 pragma warning 也支持如下格式:
#pragma warning( push [ ,n ] )
#pragma warning( pop )
這裏 n 代表一個警告等級(1---4)。
#pragma warning( push )保存所有警告信息的現有的警告狀態。
#pragma warning( push, n)保存所有警告信息的現有的警告狀態,並且把全局警告等級設定為 n。
#pragma warning( pop )向棧中彈出最後一個警告信息,在入棧和出棧之間所作的一切改動取消。例如:
#pragma warning( push )
#pragma warning( disable : 4705 )
#pragma warning( disable : 4706 )
#pragma warning( disable : 4707 )
//.......
#pragma warning( pop )
在這段代碼的最後,重新保存所有的警告信息(包括 4705, 4706 和 4707)。
#pragma comment
#pragma comment(...)
該指令將一個註釋記錄放入一個對象文件或可執行文件中。常用的 lib 關鍵字,可以幫我們連入一個庫文件。 比如:
#pragma comment(lib, "")
該指令用來將 庫文件加入到本工程中。linker:將一個鏈接選項放入目標文件中,你可以使用這個指令來代替由命令行傳入的或者在開發環境中設置的鏈接選項,你可以指定/include 選項來強制包含某個對象,例如:
#pragma comment(linker, "/include:__mySymbol")
-
C語言中遞歸函數的教學方法
導語:函數遞歸基於分治法思想,將複雜的大規模問題轉化為小規模問題進行求解,在算法設計中具有重要的理論意義和實用價值,是C語言教學的難點。下面就由小編為大家介紹一下C語言中遞歸函數的教學方法,歡迎大家閲讀!1.引言C語言是一種語法簡潔緊湊、運算符豐富、可移植...
-
2017年計算機C語言考試編程練習題及答案
江山代有才人出,各領風騷數百年。以下是小編為大家搜索整理的`2017年計算機C語言考試編程練習題及答案,希望能給大家帶來幫助!更多精彩內容請及時關注我們應屆畢業生考試網!1.從鍵盤上輸入8個浮點數,編程求出其和以及平均值。要求寫出求和以及平均值的函數。答:編...
-
c#實現sunday算法實例
Sunday算法思想跟BM算法很相似,在匹配失敗時關注的是文本串中參加匹配的最末位字符的下一位字符,下面小編為大家整理了c#實現sunday算法實例,希望能幫到大家!因正則表達式搜索總是出現死循環,開始考慮改為其他搜索方式,因為自帶的IndexOf默認只能找到第一個或最後一...
-
C語言入門知識:常量
導語:在程序運行中,其值不能被改變的量稱為常量。下面是常量相關知識,歡迎閲讀:常量有5種類型:整型常量、實型常量、字符常量、字符串常量和符號常量。(一)數值轉換數字的四種表現形式:①:二進制:所有數字由0,1構成,逢二進一,二進制數中不會出現2.。例:110101②:八進制:以數...
相關文章
- #pragma pack的作用
- Happy Summer Vacation英語作文應用文
- 學個詞Learn a Word 第589課:campaign
- JudgeFromAppearance英語作文
- Javascript中arguments對象的詳解和使用方法
- Dreamweaver中JavaScript行為操作使用方法
- 如何在Javascript中為String對象添加trim,ltrim,rtrim方法
- java使用ConcurrentHashMap和計數器實現鎖的方法
- An English Summer Camp(英語夏令營)
- 英語情景口語:Chapter 2 Introducing an Apartment