一般用法:
'#pragma parameter'
注: 不同的 parameter 引數語法和意義各不相同
c 語言預留給編譯器廠商的擴充套件指示字
#if defined(android20)
#pragma message("compile android sdk 2.0 ...")
#define version "android 2.0"
#endif
與 #error 和 #warning 不同,#pragma message 僅僅代表一條編譯訊息,不代表程式錯誤。
#include #if defined(android20)
#pragma message("compile android sdk 2.0 ...")
#define version "android 2.0"
#elif defined(android23)
#pragma message("compile android sdk 2.3 ...")
#define version "android 2.3"
#elif defined(android40)
#pragma message("compile android sdk 4.0...")
#define version "android 4.0"
#else
#error compile version is not provided!
#endif
int main()
編譯輸出:
[gcc] test.c:10: note: #pragma message: compile android sdk 4.0...
[vc] compile android sdk 4.0...
執行輸出:
[gcc] android 4.0
[vc] android 4.0
#ifndef _header_h_
#define _header_h_
// source code
#endif
與
#pragma once
這兩種方式有什麼區別呢?
test.c
#include #include "global.h"
#include "global.h"
int main()
global.h
#pragma once
int g_value = 1;
輸出:
g_value = 1
vc gcc : 無警告,無錯誤 【主持】
bcc : 編譯出錯, g_value多次定義 【不支援】
#ifndef _header_h_
#define _header_h_
#pragma once
// source code
#endif
struct test1
;struct test2
;
test1 和 test2 所佔的記憶體空間是否相同?
#pragm pack 用於指定記憶體對齊方式未對齊造成兩次記憶體讀取【32位機器的讀寫最小粒度4位元組】
結構體總長度必須為所有對齊引數的整數倍編譯器預設情況下按照 4 位元組對齊
程式設計實驗: 結構體大小計算
test_1.c
#include #pragma pack(2)
struct test1
;#pragma pack()
#pragma pack(4)
struct test2
;#pragma pack()
int main()
輸出:
108
test_2.c
#include #pragma pack(8)
struct s1
; // 整體長度為所有對齊引數的整數倍, len = 4 + 4 = 8
struct s2
; // 整體長度為所有對齊引數的整數倍 , len = 8 + 16 = 24
#pragma pack()
int main()
輸出:[gcc]
820 【截至2018/12/04,gcc 暫不支援8位元組對齊,忽略pack(8),預設4位元組對齊】
輸出:[vc]
820
C語言高階 24 pragma使用分析
pragma用於指示完成一些特定的動作,並且所定義的很多指示字是編譯器特有的。pragma在不同的編譯器間是不可移植的 預處理器將忽略它不認識的 pragma指令 不同的編譯器可能以不同的方式解釋一條 pragma指令。一般用法 pragma parameter 注 不同的parameter引數語法...
c 語言中的pragma使用
pragma 常用於網路程式設計中自定義協議,指定結構體成員的位元組對齊,當沒有指定pragma時,程式會按照結構體中最長的變數進行位元組的對齊 而使用pragma後,程式會先判斷 pragma 定義的大小與結構體中最長變數的大小 取二者較小的進行位元組對齊。struct foo char c1 s...
C 學習筆記之 pragma的使用用法
1 pragma message pragma message 訊息文字 當編譯器遇到這條指令時,就在編譯輸出視窗中將訊息文字列印出來。2 pragma code seg pragma code seg section name section class 它能夠設定程式中函式 存放的 段。當我們開...