黑馬程式設計師 iOS開發C語言基礎之預處理命令

2021-06-26 05:41:02 字數 3488 閱讀 7058

#include 

/*1.所有的預處理指令都是以#開頭

2.預處理指令分3種

1>巨集定義

2>條件編譯

3>檔案包含

3.預處理指令在**翻譯成0和1(編譯)之前執行

4.預處理指令的位置是隨便寫的

5.預處理指令的作用域:從編寫指令的那一行開始,一直到檔案結尾

6.巨集名一般用大寫或者以k開頭,變數名一般用小寫

例如:#define kcount 4  在前面加k,表示是常量

*/// #define 巨集名

被替代內容

// #define count 4

// #define kcount 4

int main()

;for (int i = 0; iprintf("%d\n", ages[i]);

}int a = count; //a = 4

// 從這行開始,count這個巨集就失效

#undef count;

return0;}

#include 

/*1.帶引數的巨集定義,只是純粹的文字替換,不做任何運算

2.簡單算術運算,比如加減乘除,帶引數的巨集定義效率比函式效率高

*//*

int sum(int a, int b)

*/int main()

#include 

// 只有寫了#if,在最後面必須加上#endif

/*1.表示定義過max這個巨集,就編譯下面的語句

#if defined(max)

...code...

#endif

2.表示沒定義過max這個巨集,就編譯下面的語句

#if !defined(max)

...code...

#endif

3.表示定義過max這個巨集,就編譯下面的語句

#ifdef  max

...code...

#endif

4.表示沒定義過max這個巨集,就編譯下面的語句

#ifndef max

...code...

#endif

*/#define max 10

#define a 10

int main()

else if(a == 5)

else

*//*這種寫法有問題,因為a是執行之後才有值10,而現在是條件編譯預處理

#if (a == 10)

printf("a == 10\n");

#elif(a == 5)

printf("a==5\n");

#else

printf("a其他值\n");

#endif

*/#if (a == 10)

printf("a == 10\n");

// 效果是這之後的兩句,不參與編譯,節省目標.o檔案儲存空間,減少**量

#elif(a == 5)

printf("a==5\n");

#else

printf("a

其他值\n");

#endif

// 注意#endif不可省略,否則return 0;}不能編譯,編譯時語法通不過會報錯。

******源程式檔案1:zhangsan.c

/*1.<>表示系統自帶的檔案,""表示自定義的檔案

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

*/#include 

/*重複宣告,語法可以通過,但是增加了編譯器的負擔,所以把頭檔案定義為如下:

lisi.h:

#ifndef abc

#define abc 33

int sum(int a, int b);

#endif

*/#ifndef abc

#define abc 33

int sum(int a, int b);

#endif

/*上面的效果是

#define abc 33

int sum(int a, int b);

這兩句參加編譯,後面的語句,因為#define abc 33,所以不再編譯,從而保證每次載入編譯標頭檔案一次。

*/#ifndef abc

#define abc 33

int sum(int a, int b);

#endif

/*這將導致wangwu.h不被編譯

#ifndef abc

#define abc 33

int minus(int a, int b);

#endif

*/#ifndef wangwu_h

#define wangwu_h 33

//#define wangwu_h  //這樣也可以,就是定義了乙個空的巨集

int minus(int a, int b);

#endif

#include "lisi.h"

#include "lisi.h"

#include "lisi.h"

#include "wangwu.h"

/*注意:wangwu.h標頭檔案的巨集名不能和lisi.h的巨集名一樣,因為一樣的話,wangwu.h這個檔案就不能參與編譯了,原理是條件編譯,所以一般以頭檔名的大寫來做巨集名,因為各個檔名不一樣

*/int main()

*******************************************

******源程式檔案2:lisi.c

int sum(int a, int b)

*******************************************

******標頭檔案3:lisi.h

#ifndef abc

#define abc 33

int sum(int a, int b);

#endif

*******************************************

******標頭檔案4:wangwu.h

#ifndef wangwu_h

#define wangwu_h 33

//#define wangwu_h  //這樣也可以,就是定義了乙個空的巨集

int minus(int a, int b);

#endif

黑馬程式設計師 iOS開發C語言基礎之指標

這個函式無法同時實現差和和的值 int sumandminus int n1,int n2 int sumandminus int n1,int n2,int n3 include 0000 0001 0000 0010 0000 0000 0000 0000 0000 0000 0000 0000...

黑馬程式設計師 C語言基礎

ios培訓 android培訓 期待與您交流!一 c語言的流程控制 1 順序結構 按照程式的書寫順序執行每一條語句 2 選擇結構 對給定的條件進行判斷,再根據判斷結果來決定執行哪一段 2.1 if語句 1 if的第一種結構 if 條件 eg include int main return 0 2 i...

黑馬程式設計師 C語言基礎

asp.net unity開發 net培訓 期待與您交流!c語言算數運算子 1.2.3.4.5.int a 10,b 20 printf 兩個差 d b a printf 兩個和 d b a printf 兩個積 d b a printf 兩個商 d b a printf 兩個餘 d b a 小技巧...