C語言基礎八

2021-09-02 03:58:22 字數 2892 閱讀 1533

#define是一條預處理指令,可以用來編寫巨集定義語句。

巨集定義語句可以用來給數字起名字。

可以在編譯時使用-d選項給乙個名字指定對應的數字,例如

gcc -dsize=6 02circle.

巨集是可以帶引數的,巨集的引數通常表示乙個名稱

巨集的引數直接參與計算,函式的引數要先製作出乙個替身然後才參與計算。

在編寫帶引數的巨集時要在每個引數外邊加一對小括號強制引數首先計算

不要把自增,自減的計算結果作為巨集的引數使用

巨集裡可以使用運算子#把乙個引數轉換成字串字面值

巨集裡也可以使用運算子##把乙個引數所代表的識別符號和其他內容合併形成乙個新識別符號

條件編譯指根據某個條件從多個語句組中選擇一組來編譯。

#ifdef 巨集名稱

語句塊1

#else

語句塊2

#endif

如果前面定義過對應的巨集則編譯語句塊1,否則編譯語句塊2

預處理指令#ifndef也可以實現條件編譯的效果

條件編譯還可以從多組語句中進行選擇,方法如下

#if 邏輯表示式1

語句塊1

#elif 邏輯表示式2

語句塊2

#else

語句塊3

#endif

其中#elif可以出現多次

c語言中不同的函式可以放置在不同的檔案中。

所有函式的宣告應該統一放置在標頭檔案中。

如果乙個原始檔與某個標頭檔案中的任意函式有關,這個原始檔應該使用預處理指令#include把這個標頭檔案包含進來。

多檔案程式編譯時應該在命令中包含所有原始檔的名稱,例如

gcc 1.c 2.c ...

還可以使用gcc對每個原始檔進行單獨編譯,命令如下

gcc -c 1.c

命令結束會得到以.o作為副檔名的目標檔案

可以使用gcc把多個目標檔案合併成乙個可執行檔案,命令如下

gcc 1.o 2.o

編寫標頭檔案時要使用條件編譯語句對內容進行控制,這樣可以避免被多次編譯。

/*主函式引數練習

*/#include

int main(int argc, char *argv) */

for (loop = 1; loop <= (argc - 1); loop++)

printf("\n");

return 0;}/*

預處理指令練習

*/#include

#define pi 3.14f

#define circle(r1) 2 * pi * r1

#define area(r1) pi * r1 * r1

#define print(arr, num) printf("%d ", arr[num])

#define inc(v) v++

#define size 5

void inc(int value)

int main()

printf("\n");

printf("loop是%d\n", loop);

inc(loop);

printf("loop是%d\n", loop);

inc(loop);

printf("loop是%d\n", loop);

return 0;}/*

巨集練習*/

#include

#define secph (60 * 60)

#define neg(x) 0 - (x)

int main()

/*巨集練習

*/#include

#define max(x,y) x > y ? x : y

#define ch(c) c >= 'a' && c <= 'z' ? c- 'a' + 'a' : c - 'a' + 'a'

int main()

/*巨集運算子練習

*/#include

#define str(n) #n

#define var(n) v_##n

#define global(n) g_##n

int global(value);

int main()

/*預定義巨集練習

*/#include

int main()

/*條件編譯練習

*/#include

//#define one

int main()

/*條件編譯練習

*/#include

int main()

else

#else

if (1 == order)

else

#endif

return 0;}/*

條件編譯練習

*/#include

int main()

/*條件編譯練習

*/#include

int main()

12add1.c

#include "12add.h"

int add(int x, int y)

/*多檔案程式設計練習

*/#include

#include "12add.h"

int main()

#ifndef __12add_h__

#define __12add_h__

int add(int, int);

#endif //__12add_h__

c語言基礎(八)

結構體內成員對齊規則 1 我們的結構體變數本身就是在4位元組對齊的位置,編譯器幫我們做的事。2 第乙個成員,就從結構體開始的位址處,存放。這個元素,具體佔多少位元組,由緊挨著下個元素決定。3 整個成員變數自身都對齊 了,還沒有結束。4 整個結構體還要是預設位元組對齊的最小整數倍。結構體預設的位元組對...

c 基礎 筆記(八)

1 函式模板 1.1 模板分類 函式模板 類模板 1.2 template typename t 告訴編譯器緊跟著下面的函式或類出現 t不要報錯 1.3 void myswap t a t b 1.4 呼叫時候 兩種方式 1.4.1 自動型別推導,比如推導出t型別才能使用模板,不要出現二義性問題 1...

C語言 八 陣列

一維陣列定義與使用 int array 10 定義乙個一維陣列,名字叫array,一共有10個元素,每個元素都是int型別的 array 0 20 array 1 30 array 9 80 陣列索引是從0開始的。陣列在記憶體的儲存方式 陣列在記憶體中就是一段連續的空間,每乙個元素的型別是一樣的。一...