C語言之關鍵字 巨集定義 條件編譯

2021-07-05 13:36:14 字數 2218 閱讀 3918

區域性變數:

特點:

注意:區域性變數沒有固定的初始化值,開發中千萬不能使用未初始化的區域性變數;

儲存位置:區域性變數儲存在棧中,當作用域結束系統會自動釋放棧中的的區域性變數。

特點:

如果存在和全域性變數同名的區域性變數,那麼區域性變數會覆蓋全域性變數

注意:全域性變數如果沒有進行初始化,系統缺省會將全域性變數初始化為0

外部區域性變數特點:

可以定義同名的外部全域性變數,多個同名的外部全域性區域性變數指向同一塊儲存空間;

內部區域性變數特點:

定義多個同名的內部全域性變數,多個同名的內部全域性變數如果不在同乙個檔案中, 指向不同的儲存空間。

extern用在函式內部

static 全域性變數的作用

static對全域性變數的作用

由於靜態全域性變數的作用域侷限於乙個原始檔內,只能為該原始檔內的函式公用,因此可以避免在其它原始檔中引起錯誤。

extern對全域性變數的作用

如果宣告的時候沒有寫extern那系統會自動定義這個變數,並將其初始化為0

如果宣告的時候寫extern了,那系統不會自動定義這個變數。

static 作用

extern作用

不帶引數的巨集定義

注意點:

帶引數的巨集定義

格式:

#define 巨集名(形參表) 字串

例: #define sum(v1, v2) v1+v2

注意點:

#include 

// 下面定義乙個巨集p(a),作用是返回a的平方

#define pow(a) (a) * (a) // 如果不用小括號括住計算結果

// 計算結果用括號括起來

// #define pow(a) ( (a) * (a) )

int main(int argc, const

char * argv)

條件編譯和選擇結構if的區別:

2.#if需要乙個明確的結束符號 #endif

為什麼需要乙個明確的結束符號?
如果省略掉#endif, 那麼系統就不知道條件編譯的範圍, 那麼會將滿足條件之後的第二個條件之後的所有內容都清除

二 #if-#else 條件編譯指令

第二種格式:

#if 條件1

...code1...

#elif 條件2

...code2...

#else

...code3...

#endif

三 #ifdef 條件編譯指令

四 #ifndef 條件編譯指令

五 使用條件編譯指令除錯bug

typedef語法格式:typedef 原型別名 新型別名;

typedef使用方法

基本資料型別

第二種形式: 定義列舉型別的同時給列舉型別起別名

typedef

struct person persontype;

typedef

struct persontype;

指標typedef和#define的區別

typedef

char *string1; // 給char *起了個別名string1

#define string2 char * // 定義了巨集string2

int main(int argc, const

char * argv)

const主要的作用

如何使用const?

技巧

先看「*」的位置

如果const 在 *的左側 表示值不能修改,但是指向可以改。

如果const 在 *的右側 表示指向不能改,但是值可以改

如果在「*」的兩側都有const 標識指向和值都不能改。

總結: (1) 如果const修飾在*p前,則不能改的是*p,p的值可以修改。

(2) 如果const是直接寫在p前面,則p不能改,*p的值可以修改。

C語言之關鍵字

基本資料型別 short int long float double char unsigned signed 8個 復合資料型別 struct union enum 3個 語句結構 if esle do while for switch case default break continue go...

C語言 條件編譯和static關鍵字

include ifdef hello char c hello world 如果hello這個巨集存在,包含這段 else char c no zuo,no die 否則包這段 endif int main 程式想通過記住之前的值,然後不斷疊加上去 include int count 0 int ...

C語言之關鍵字typedef

c語言提供了乙個 型別定義 的功能 typedef 用此來建立新的資料型別名。需要強調的是,從任何意義上來講,typedef 的宣告並沒有建立乙個新的型別,它只是為某個已經存在的型別增加乙個新的名稱而已。typedef 宣告也沒有增加任何新的語義,通過這種方式宣告的變數與通過普通方式宣告的變數具有完...