C語言基礎知識 6

2021-07-11 04:38:58 字數 1392 閱讀 8488

1.#pragma簡介

#pragma是編譯器指示字,用於指示編譯器完成一些特定動作。

#pragma所定義的很多指示字是編譯器和作業系統特有的

#pragma在不同的編譯器間是不可移植的

一般用法:

#pragma  parameter

不同的parameter引數語法和意義各不相同。

#pragma  message

message引數在大多數的編譯器中都有相似的實現

message引數在編譯時輸出訊息到編譯輸出視窗中

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()

#pragma  pack

什麼是記憶體對齊?

不同型別的資料在記憶體中按照一定的規則排列;而不是順序乙個接乙個排放,這就是對齊。

為什麼需要記憶體對齊?

cpu對記憶體的讀取不是連續的,而是分成塊讀取的,塊的大小只能是1,2,4,8,16位元組

當讀取操作的資料未對齊,則需要兩次匯流排週期來訪問記憶體,因此效能會大打折扣。

某些硬體平台只能從規定的位址處取某些特定型別的資料,否則丟擲硬體異常。

#pragma pack能夠改變編譯器的預設對齊方式。

第乙個成員起始於0偏移處

每個成員按其型別大小和指定對齊引數n中較小的乙個進行對齊

偏移位址和成員占用大小均需對齊

結構體成員的對齊引數為其所有成員使用的對齊引數的最大值

結構體總長度必須為所有對齊引數的整數倍。

#include #pragma pack(8)

struct s1

;struct s2

;#pragma pack()

int main()

8  24   4

C語言基礎知識歸納(6)

1 定義 陣列是有序的並且具有相同型別的資料的集合。2 特徵 若干 相同型別 長度 有序 3 根據陣列的下標個數的不同可分為 一維 二維 多維 4 按陣列元素的型別不同可分為 數值陣列 字元陣列 指標陣列 結構陣列 1 一般形式 型別符 陣列名 常量表示式 型別符 任一種基本資料型別或構造資料變數 ...

go語言基礎知識6

go 語言函式 unc 函式由 func 開始宣告 function name 函式名稱,函式名和引數列表一起構成了函式簽名。parameter list 引數列表,引數就像乙個佔位符,當函式被呼叫時,你可以將值傳遞給引數,這個值被稱為實際引數。引數列表指定的是引數型別 順序 及引數個數。引數是可選...

C語言基礎知識

1 的問題。int i 1 int j 2 int k i j printf d k 輸出k為3。編譯原理有關編譯器在詞法解析的時候,對於運算子,總是查詢最大的匹配也就是說,i j,編譯器在找到 的時候,它不立即理解為 而是繼續下乙個字元,下乙個字元仍然是 可以組成 再往下的話便是 不成立了。所以i...