1. 程式人生 > >83.#pragma詳解

83.#pragma詳解

depth 速度 def stop get gda .pch 程序 開啟


  • 創建數據段

1 //創建數據段
2 #pragma  data_seg("fangfangdata")
3 int my_data_seg = 0;
4 #pragma data_seg()
  • 與數據段連接,實現數據通信,分享
    1 //實現數據通信,分享
    2 #pragma comment(linker,"/SECTION:cgwdata,RWS")

  • 測試,用數據段使程序只能打開一次
    1 if (my_data_seg > 0)
    2     {
    3         printf("程序只能啟動一個");
    4         MessageBoxA(0, "no", "no", 0
    ); 5 return; 6 } 7 my_data_seg++;


  • 限定函數作用域
    1 #pragma  deprecated(run1,run2,run3)//限定函數作用域

  • 用法示例
     1 #include<stdio.h>
     2 #include<stdlib.h>
     3 
     4 void run1()
     5 {
     6 
     7 }
     8 void run2()
     9 {
    10 
    11 }
    12 void run3()
    13 {
    14 
    15 }
    16 
    17 void main()
    18 {
    19 
    20     run1();
    
    21 run2(); 22 run3(); 23 #pragma deprecated(run1,run2,run3)//限定函數作用域 24 run1(); 25 run2(); 26 run3(); 27 28 }


  • 設置自定義函數為內聯函數
    1 #pragma intrinsic(run1,run2) //設置為內聯函數

  • 設置系統函數為內聯函數
    1 #pragma intrinsic(memset, strlen) //設置定定義函數,系統函數 為內聯函數

  • 取消內聯函數
    1 #pragma  funciton(run1)//取消內聯函數

  • 用法示例
 1 #include<stdio.h>
 2 #include <stdlib.h>
 3 #include<string.h>
 4 void run1()
 5 {
 6     puts("123");
 7 }
 8 void run2()
 9 {
10     puts("123456");
11 }
12 #pragma intrinsic(run1,run2) //設置為內聯函數
13 
14 #pragma intrinsic(memset, strlen) //設置定定義函數,系統函數 為內聯函數
15 void main() 
16 {
17     run1();
18 
19     run2();
20 
21 #pragma  funciton(run1)//取消內聯函數
22     getchar();
23 }
  • 設置內聯的深度,開啟內聯或者禁止內聯,自動開啟內聯,加快代碼速度...
    1 #pragma inline_depth(4)//設置內聯的深度
    2 #pragma inline_recuresion(on) //on off //開啟內聯或者禁止內聯
    3 #pragma  auto_inline(on)//自動開啟內聯,加快代碼速度
    4 #pragma hdrstop("1.pch")
    5 #pragma check_stack(on)//off自動檢查棧
    6 
    7 //g全局優化,s,t//  代碼體積與速度   y框架指針
    8 #pragma optimize("g" ,on)//代碼優化


  • 常量字符串分配到run函數所在的代碼 ,聲明一個字符串分配到函數的所在,函數無法定義
     1 #include <stdio.h>
     2 #include<stdlib.h>
     3 void run();
     4 void run1()
     5 {
     6 
     7 }
     8 //常量字符串分配到run函數所在的代碼  ,聲明一個字符串分配到函數的所在,函數無法定義
     9 #pragma  alloc_text("mysection",run)
    10 
    11 void main()
    12 {
    13     char *p = "mysection";
    14     printf("%s", p);
    15     run1();
    16 
    17     getchar();
    18 
    19 }


  • #pragma push_macro pop_macro
  • 用法示例
    1 //Y 的宏進棧,保存原來的宏,仍然生效
    2 #pragma  push_macro("Y")
    3 
    4 //Y=80生效
    5 #define Y 80  
    6 
    7 //Y 的宏出棧,取消Y的生效,讓原來的Y生效
    8 #pragma  pop_macro("Y")

83.#pragma詳解