你們好,我是愛學編程的小圓子。
上一篇我以爲稀里扒拉的,根本沒講到重點,因此我又來詳細講一次啦。編程
一些新手看到一些大佬的代碼,裏面可能第一句就是#include<....>
,不少新手看不懂是什麼,可能還有一些#define #ifdef #if #endif #else ....
等等像這種帶#符號的代碼這些代碼在c標準裏面都叫預約義代碼。
那什麼是預約義代碼呢?
預約義代碼就是在預編譯階段編譯的代碼,至於編譯過程限於篇幅我就不贅述了
首先咱們來看一個例子
-----我是分界線-----
#define A = 10
int a = A + A;
-----我是分界線-----
編譯器會當作
-----我是分界線-----
int a = 10 + 10;
-----我是分界線-----
#define被略掉了
那有的時候用預編譯代碼是很好的,有的時候他能夠省略可執行文件所佔用的內存
就好比
-----我是分界線-----
#ifdef MAKE
printf("MAKE is define.");
#else
printf("MAKE isn't define.");
#endif
-----我是分界線-----
若是定義了MAKE符號那編譯器就會編譯第一個printf,若是沒有定義MAKE符號就會編譯第二個printf。
劃重點!:#define是定義符號 #ifdef是if is define也就是判斷有沒有定義這個符號#ifndef是#ifdef的反義代碼 #elif 和 else if(...)同義可是#elif就是編譯時判斷else if()是運行時判斷#else參考上面學習
#define AA 1
#define BB 2
int main()
{
int a = AA + BB;
}
按照上面的原理,編譯器看到的就是
int main()
{
int a = 1 + 2;
}code
來個更深奧點的:教程
//default.h
#ifndef A
#defif B
#define b
#else
#define bb
#endif //#defif B
#define bbb
#else
#define aaaa
#endif //#ifndef A內存
//default.c
int main()
{
#define A
#include"default.h"
}get
編譯的時候就會:
第一步:
int main()
{
#define A
#ifndef A
#defif B
#define b
#else
#define bb
#endif
#define bbb
#else
#define aaaa
#endif
}編譯器
第二步:
int main()
{
#define aaaa
}
那我再弄一個:
int main()
{
#define B
#include"default.h"
}編譯
第一步:
int main()
{
#define B
#ifndef A
#defif B
#define b
#else
#define bb
#endif
#define aaa
#else
#define aaaa
#endif
}原理
第二步:
int main()
{
#define b
#define aaa
}新手
有什麼疑惑能夠在評論區跟我說,我會盡快回答