C語言入門第二十篇,預處理和typedef

我們也該來說說預處理和typedef,爲什麼要把預處理和typedef放在一起呢,因爲預處理中的宏定義有那麼一點類似,這一篇我們來講一下預處理和typedef。
預處理
預處理是在代碼開始運行之前進行的動作,我們之前一直寫#include<stdio.h>,其實他就是一種預處理。預處理大概分爲以下幾種
#define
define是c語言常用的宏,用法是將變量作爲一個常量來使用,類似一種替換。如下面的代碼:

#include<stdio.h>
#define N 5
int main(){
	int sum = N + 1;
	printf("%d\n", sum);
}

這裏的N被替換爲了5。這種用法在實際中其實很好用,對於有些重複很多次的常數可以通過字符進行替換,比如圓周率這些等等。
特別用法
來看下面這段代碼:
#include<stdio.h>
#define MAX(a,b) ( (a) > (b) ? (a) : (b) )
int main(){
int a=3,b=4;
printf("%d\n", MAX(3,4));
}
define宏定義替換了後面比較大小的代碼,完成了輸出最大值的功能。
這裏需要注意,我後面的代碼打了很多括號,是因爲define宏定義是單純的替換對於運算的優先級這些都無法進行控制,所以儘量多打一些括號保證結果的正確性。
還有一個需要注意的問題,這種宏定義的方式儘量使用全部大寫的方式,和函數的定義進行區分,不然很難分辨誰是宏誰是函數。
#undef
同#define的相反,移除一個宏定義,如果一個宏需要重新定義則需要移除
條件編譯
在編譯有些代碼的時候,會因爲有些原因不編譯一些代碼塊。

#include<stdio.h>
#define DEBUG 1
int main(){
#if DEBUG
	printf("1");
#else
	printf("2");
#endif
}

這段代碼給我們展示了條件編譯使用方法,當判斷爲DEBUG爲1的時候顯示1,0的時候顯示2。
條件編譯中還可以加入#elif,和條件語句中else if原理相同。
同樣#if還可以確認一個符號(這裏指的是宏定義的符號)是否被定義。

#include<stdio.h>
#define DEBUG 0
int main(){
#if defined(DEBUG)
	printf("1");
#else
	printf("2");
#endif
}

和上上面的例子類似。
#if和#elif等和if語法類似,可以進行嵌套使用。
#include
文章開頭就說了這是一個預處理,從開始講到c語音到現在我們一直在用這個命令,他其實就是一種文件包含,可以包含函數庫(一般使用尖括號<>)和本地文件(一般使用雙引號“”)。
文件包含可以能會出現多重包含的情況,爲了避免多重包含可以使用#ifndef來進行判定,例如我們先判定一下是非包含了a.h這個頭文件代碼如下

#ifndef _A_h
#include “a.h”
#endif

typedef
typedef看似和define相同實際差別很大,這也是我爲什麼把他們兩個放在一起講的原因,充分看出他們兩個的區別。
typedef是一種別名設置,這裏的別名指的不是變量的別名,而是標識符的別名,請看下面的代碼。

#include<stdio.h>
typedef int a;

int main(){
	a n=1;
	printf("%d\n",n);
}

typedef將int的別名起爲了a,我們可以看到a可以定義一個變量n,並且我們打印了出來。
高級用法
我們這裏看看在數據結構中常常的用法。

#include<stdio.h>
typedef struct node
{
	int data;
	int *next;
}link;

int main(){
	link a;
	scanf("%d",&a.data);
	printf("%d\n",a.data);
}

這裏的typedef將整個struct結構別名爲了link,所以這裏link a,a就是一個結構體。
我們再來看看一種特殊的用法。

#include<stdio.h>
typedef int a[10];
int main(){
	a b;
	scanf("%d",&b[2]);
	printf("%d\n",b[2]);
}

這段代碼展現了typedef的另一種能力,這裏的a定義的b到底是一個什麼呢,是一個10個int元素的數組。可以通過上面的代碼看出。
總結
本章介紹了預處理和typedef,其中一定要了解#define和typedef的區別。

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