c語言預處理與typedef

2021-08-30 08:39:54 字數 1373 閱讀 6623

一、預處理

1、如包含命令#include ,巨集定義命令#define pi 3.1415926等。

在源程式中這些命令都放在函式之外,而且一般都放在原始檔的前面,它們稱為預處理部分。

2、 包含命令中的檔名可以用雙引號括起來,也可以用尖括號括起來。例如以下寫法都是允許的:

#include"stdio.h"

#include

但是這兩種形式是有區別的:使用尖括號表示在包含檔案目錄中去查詢(包含目錄是由使用者在設定環境時設定的),而不在源檔案目錄去查詢;

使用雙引號則表示首先在當前的源檔案目錄中查詢,若未找到才到包含目錄中去查詢。使用者程式設計時可根據自己檔案所在的目錄來選擇某一種命令形式。

3、預處理程式提供了條件編譯的功能。可以按不同的條件去編譯不同的程式部分,因而產生不同的目標**檔案。這對於程式的移植和除錯是很有用的。

#ifdef 識別符號

程式段1

#else

程式段2

#endif

如果識別符號已被 #define命令定義過則對程式段1進行編譯;否則對程式段2進行編譯。

4、預處理功能是c語言特有的功能,它是在對源程式正式編譯前由預處理程式完成的。在程式中用預處理命令來呼叫這些功能。

巨集定義是用乙個識別符號來表示乙個字串,這個字串可以是常量、變數或表示式。在巨集呼叫中將用該字串代換巨集名。

巨集定義可以帶有引數,巨集呼叫時是以實參代換形參。而不是「值傳送」。

#define 巨集名(形參表) 字串

#define m(y) yy+3y //巨集定義

……k=m(5); //巨集呼叫

……為了避免巨集代換時發生錯誤,巨集定義中的字串應加括號,字串中出現的形式引數兩邊也應加括號。

二、typedef

為基本資料型別定義新的型別名

typedef unsigned int count;

為自定義資料型別(結構體、共用體和列舉型別)定義簡潔的型別名稱

typedef struct tagpoint

point;

為陣列定義簡潔的型別名稱

typedef int int_array_100[100];

int_array_100 arr;

為指標定義簡潔的名稱

對於指標,我們同樣可以使用下面的方式來定義乙個新的別名:

typedef char* pchar;

pchar pa;

#define是在預編譯時處理的,它只能作簡單的字串替換,而typedef是在編譯時處理的。實際上它並不是作簡單的字串替換,而是採用如同定義變數的方法那樣來宣告乙個型別。

C語言預處理

c語言中編譯預處理的三種形式的命令 巨集定義,檔案包含,條件編譯命令。1 巨集定義主要是 define,undef 如下 define pi 3.1415926 不帶引數的巨集定義 define max a,b a b?a b 帶引數的巨集定義 說明 巨集定義在c語言與c 語言中是相通的。下面舉例說...

C語言預處理

預處理 系統自動自動呼叫預處理程式對程式中 號開頭的預處理部分進行處理,處理完畢後可以進城源程式的編譯階段。預定義 一些預定義符號 常用於除錯 file 正在預編譯的源檔名 line 當前行號 只有這個是整數常量,其他是字串常量 function 當前所在函式名 date 當前日期 time 當前時...

c語言預處理

預處理可以包含 1 巨集定義指令 2 標頭檔案包括指令 3 條件編譯指令 4 編譯程式可以識別的特殊符號 巨集定義 define undef 檔案包含 include 條件編譯 if ifdef else elif endif等 其他 line error program等 注意事項 1 在c語言中...