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

預處理指令:
所有的預處理指令都是以#開頭
代碼翻譯成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 “xxx.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 //定義類型  改變名稱
{
int age;
}Mystu;
或者
typedef struct   //未定義類型  只是給定義的結構體改一

個名字
{
int age;
}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 可以省略,因爲默認均爲外部
{
printf("調用了test");
}
不允許有同名外部函數、

內部函數:定義的函數只能被本文件訪問,其他文件不能訪問
static void test2()
{
printf("調用了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 a=0;
a++;
pirntf("%d",a);

//第二次調用發現已存在 b 自動忽略 static int b =0;
static int b=0;
b++;
printf("%d",b);
}
int main()
{
test();//a=1;b=1;
test();//a=1;b=2;
test();//a-1;b=3;
}

遞歸:
每次調用都是重新開闢內存空間
條件:
①函數本身調用本身
②必須有個明確的返回值

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

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

問題5:
typedef的用法?




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章