<address id="ousso"></address>
<form id="ousso"><track id="ousso"><big id="ousso"></big></track></form>
  1. C語言

    C語言#pragma指令用法

    時間:2025-04-04 10:10:53 C語言 我要投稿
    • 相關推薦

    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) = %d\n",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 "*.dfm"表示把*.dfm 文件中的資源加入工程。 *.dfm 中包括窗體外觀的定義。

      #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, "user32.lib")

      該指令用來將 user32.lib 庫文件加入到本工程中。linker:將一個鏈接選項放入目標文件中,你可以使用這個指令來代替由命令行傳入的或者在開發環境中設置的鏈接選項,你可以指定/include 選項來強制包含某個對象,例如:

      #pragma comment(linker, "/include:__mySymbol")

    【C語言#pragma指令用法】相關文章:

    C語言#undef 指令用法07-19

    C語言的常用新指令有哪些09-07

    c語言鏈表的用法10-20

    c語言strcmp的用法10-26

    c語言if語句的用法07-23

    assert用法(C語言)05-30

    C語言#include用法10-17

    C語言#define的用法08-19

    C語言assert的用法10-29

    <address id="ousso"></address>
    <form id="ousso"><track id="ousso"><big id="ousso"></big></track></form>
    1. 日日做夜狠狠爱欧美黑人