C 24 pragma 使用分析

2021-09-13 02:18:28 字數 3231 閱讀 2715

一般用法:

'#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 它能夠設定程式中函式 存放的 段。當我們開...