IOS學習 C語言基礎學習7(預處理指令)

2021-06-26 10:06:04 字數 3061 閱讀 4163

預處理指令:

所有的預處理指令都是以#開頭

**翻譯成0和1之前執行的指令

1、巨集定義

2、條件編譯

3、檔案包含

預處理指令的位置是隨便寫的,但是預處理指令是有作用域的

一、巨集定義

格式:#define count 6

#undef count  作用失效,作用域結束

巨集定義一般是大寫,或者以k開頭

2、帶引數的巨集

#define sum(v1,v2) v1+v2

int a =10;

int b = 20;

int c = sum(a,b);

printf("%d",c);//輸出30

巨集定義只負責替換** 不負責進行算術計算

注意:大引數的巨集定義,一定要加()否則可能導致計算錯誤

#define pingfang(a) ((a)*(a))

帶引數的巨集定義效率比函式高

二、條件編譯:

只有符合條件的語句才參與編譯

有#if必須有#endif 

#if defined(a) //#if def a

printf("");

#endif

檔案關聯(include):

<>表示系統自帶的,「」表示自定義的檔案

不允許迴圈包含,比如a.h包含b.h,b.h又包含a.h

當程式較大,存在多個檔案時

例如:乙個主函式檔案 main.c

乙個算術函式檔案 jisuan.c

編譯執行的時候要將兩個一起編譯執行,但main.c檔案中有沒

有對jisuan.c中函式的宣告,因此需要,jisuan.c檔案的編寫

者編寫乙份.h檔案,將所用到的函式的宣告寫到.h檔案中區,

並在主函式中新增 #include 「***.h」;將這個檔案包含進來

.h檔案的寫法

內容:是非中函式的宣告語句

注意:為了保證.h檔案能夠準確執行在書寫時應新增判斷

例如:#ifndef xx_h//此處的命名規則要謹記

#define xx_h

...函式的宣告

#endif

typedef:

基礎型別改名:

typedef int myint ;給int起乙個別名 程式中可以代替int

myint a=20;

字元指標變字串string

typedef char * string; 給指標型別char*起乙個別名string

string name ="jack";

結構體:

typedef struct student mystu;

mystu stu;

或者typedef struct student //定義型別  改變名稱

mystu;

或者typedef struct   //未定義型別  只是給定義的結構體改一

個名字mystu;

定義乙個指向函式的指標

typedef int (*mypoint)(int,int);

mypoint p = sum;//這樣宣告跟定義

typedef作用:

1、給已經存在的型別起乙個新的名稱

2、適用場合:

①基本資料型別

②指標③結構體

④列舉⑤指向函式的指標

注意:#define string2 char*

string2 s1,s2;

#define 只是簡單的替換,上面的語句相當於

char *s1,s2; 相當於

char *s1; char s2;

但是:typedef char* string

string s1,s2;

typedef是給已存在型別起乙個新的名稱,相當於

char*(s1,s2); 相當於

char *s1; char *s2;

static和extern

1、函式

下所有函式都是外部函式

extern void test()extern 可以省略,因為預設均為外部

不允許有同名外部函式、

static void test2()

允許不同檔案中有同名的內部函式

static對函式的作用:

1、定義乙個內部函式

2、宣告乙個內部函式

extern 對函式的作用:

1、完整的定義乙個外部函式

2、完整的宣告乙個外部函式

extern可以省略,預設情況下宣告和定義的函式都是外部函式

2、變數

全域性變數:

1、外部變數:

定義的變數能被本檔案和其他檔案訪問

①預設情況下,所有的全域性變數都是外部變數(不同檔案中的

同名全域性變數實際上是乙個變數,佔據同乙個的記憶體空間)

(extern)int a ;即定義外部變數

2、內部變數:

定義的變數只能被本檔案訪問,不能被其他檔案訪問

static int b;

不同檔案中的同名內部變數,互不影響

static 對變數的作用:

①定義乙個內部變數

extern對變數的作用

①定義乙個外部變數

static對函式的作用

①定義和宣告乙個內部函式

extern對函式的作用:

定義和宣告乙個外部函式(可以省略)

static修飾區域性變數:

①延長區域性變數的生命週期,程式結束的時候,區域性變數才會

被銷毀②並沒有改變區域性變數的作用域

③所有的test函式都共享著乙個變數b

④適用場合:如果某個函式的呼叫頻率特別高,這個函式內部

的某個變數值是固定不變的

void test()

int main()

遞迴:每次呼叫都是重新開闢記憶體空間

條件:①函式本身呼叫本身

②必須有個明確的返回值

問題4:

條件編譯只有符合條件的語句才參與編譯,那麼後面的不符合

條件的語句 即使產生語法錯誤也不會報錯嗎

問題5:

typedef的用法?

IOS學習 C語言基礎學習4

函式 封裝乙個功能 1 什麼情況下定義函式 新增乙個常用的新功能 2 函式的定義格式 返回值型別 函式名 形式引數列表 1 形式引數 定義函式時函式名後面中的引數 2 實際引數 呼叫函式時,傳入的具體資料 3 如果是基本資料型別作為函式形參,純粹是值傳遞,修改函式內部形參的值,並不會影響外面的實參的...

IOS基礎 C語言學習之陣列

一 陣列的基本概念 1.什麼是陣列 陣列,從字面上看,就是一組資料的意思,沒錯,陣列就是用來儲存一組資料的 2.陣列的特點 1 只能存放一種型別的資料,比如int型別的陣列 float型別的陣列 2 裡面存放的資料稱為 元素 二 陣列的定義 1.定義 想要定義乙個陣列,需要宣告兩點 宣告陣列的型別 ...

C語言基礎學習(7) 指標

include void interchange2 int int void interchange1 int u,int v int main void void interchange1 int u,int v void interchange2 int u,int v 函式1只是在形參交換資料...