宏定義,如:#define PI 3.1415926
查看用宏定義的值替換宏名稱,如:gcc -E test.c
帶參數的宏:MAX(x,y) (x)>(y)?
((x):(y))?? //用法與函數一樣
宏運算:
?? ?#define PRINT(n) printf(#n"=%d",n)?? //#n 就是把傳入的變量值作為字符串放在那里
?? ?#define MAX(type) type max_##type()? //##n就是把變量的值作為函數名的一部分
?? ?#define MKID(n) i_##n??????????????? //##n就是把變量的值作為變量名的一部分
C語言中提前定義的宏:
?? ?_LINE_ 當前正在編譯的行號:%d
?? ?_FILE_ 正在編譯的源程序名:%s
?? ?_DATE_ 編譯程序的日期:%s
?? ?_TIME_ 編譯程序的時間:%s
?? ?_STDC_ 推斷編譯器是否符合c標準,返回0或1:%d
條件編譯:
?? ?#define TEST 1
?? ?#if TEST
?? ??? ?//TEST為真時運行的代碼
?? ?#endif
?? ?
?? ?#ifndef ABC_H? //假設沒定義,就定義宏
?? ?#define ABC_H
?? ?//頭文件定義
?? ?#endif
?? ?
?? ?#ifdef ABC_H? //假設定義了宏,取消定義
?? ?#undef ABC_H
?? ?#endif
?? ?推斷:????????? if defined(TEST) && !defined(ABC_H){??? }
?? ?if……else……語法:#if …… #elif……#elif……#else……#endif
編譯時。參數? -D 可隨時定義宏。
聲明使用外部變量的方法:exterm int speed;//speed為外部變量名
編寫makefile文件批量編譯的語法,演示樣例:
main:main.o test.o test.h? //冒號前臺的是生成的目標。后面的是依賴的文件
?? ?gcc main.o test.o -o main? //編譯的詳細語句
main.o:main.c
?? ?gcc -c main.c
test.o:test.c
?? ?gcc -c test.c
clean:
?? ?rm *.o
用法 。能夠使用make 編譯所有,也可使用make main.o 生成 main.o,使用make test.o 生成 test.o ,make clean 刪除編譯生成的.o文件。
結構體長度計算演示樣例(自己主動補齊):
總長度為最長數據類型字節的整數倍。
struct student//總長28。是4的整數倍,所以終于大小為28字節
{
?? ?int ID;//4字節
?? ?char name[20];//數組 ,每一個字符1字節,共20字節
?? ?int age;//4字節
};
typedef struct//總長18字節,要是4的整數倍。大于10且是4的整數倍的數是20,所以終于大小為20字節
{
?? ?int ID;//4字節
?? ?char name[10];//數組 ,每一個字符1字節,共10字節
?? ?int age;//4字節
}student;
結構體變量的定義和使用:
?? ?struct student s; 或 struct student s={101,"zs",20};//定義時總體賦值
?? ?s.ID=101;//單個賦值
?? ?strcpy(s.name,"zs");//字符數組賦值