程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C >> C語言入門知識 >> C語言筆記之條件編譯

C語言筆記之條件編譯

編輯:C語言入門知識

上篇文章中主要介紹了#define的用法,本文介紹幾個它的“近親”。

1、#undef

C語言不允許對同一個宏名稱重復定義,比如下面的寫法編譯時會報錯:

 

  #define R 3
  #define R 4
那麼#undef就是用來取消對一個宏名的定義的,取消之後我們才可以重新使用它。

 

 

#define R 3
#undef R
#define R 4
即使開始沒有定義 R ,取消 R的定義也是合法的。如果想使用一個特定名字,但又不能確定前面是否已經使用了該名字,為安全起見,就可以取消該名字的定義。

 

 

2、#ifdef #ifndef #else #endif

先擺代碼:

 

#ifndef HEADER_FILENAME
#define HEADER_FILENAME
#endif

 

看名字就能猜到這是啥意思,#ifdef 是指如果某個宏名被定義了,那麼執行該命令和#endif或#else之間的代碼;而#ifndef恰好相反,如果某個宏名沒被定義,那麼執行它和#endif或#else之間的代碼。這些中間的代碼既可以是預處理命令,還可以是普通代碼。如:

 

#if MACHINE == 68000
int x;
#else
long x;
#endif

 

#ifdef #else 格式非常類似於C中 的if else 。主要差異為預處理器不能識別標記代碼塊的花括號 {} ,因此使用#else (如果需要)和#endif (必須存在)來標記指令塊。這些條件結構可以嵌套。

一般地,當某文件包含幾個頭文件,而且每個頭文件都可能定義了相同的宏肘,使用#ifndef可以防止對該宏重復定義。此時,第一個頭文件中的定義變成有效定義,而其他頭文件中的定義則被忽略。為什麼會多次包含同一文件呢?最常見的原因是許多包含文件自身包含了其他文件,因此可能顯式地包含其他文件己經包含的文件。為什麼這會成為問題呢?因為頭文件中的有些語句在-個文件中只能出現一次(如結構類型的聲明)。標准C頭文件使用#ifndef技術來避免多次包含。

 

3、#if 和#elif 指令
它們更接近常規的 C中的 if和else,後跟常量整數表達式。如果表達式為非零值,則表達式為真。在該表達式中可以使用 C的關系運算符和邏輯運算符。

許多新的實現提供另一種方法來判斷-個名字是否已經定義。不需使用:
#ifdef VAX
而是采用下面的形式:
#if defined (VAX)
這裡, defined 是一個預處理器運算符,如 果defined 的 參數已用#define 定義過 , 那麼defined 返回1 ,否則返回 0。這種新方法的優點在於它可以和#elif一起使用。

 

#if defined (lBMPC)
	#include "ibmpc.h'
#elif defined (VAX)
	#include "vax.h'
#elif defined (MAC)
	#include "mac.h"
#else
	#include 'general.h'
#endif

 

4、#error #line #progma
以後補充,用的太少了。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved