1. 程式人生 > >c++ 預處理指令#define, #endif...

c++ 預處理指令#define, #endif...

第一個 ++ 空白字符 當前 def windows 源代碼 定義宏 else

常見的預處理指令有:

# 空指令,無任何效果

# include 包含一個源代碼文件

#define 定義宏

#undef 取消已定義的宏

#if 如果給定條件為真,則編譯下面代碼

#ifdef 如果宏已經定義,則編譯下面代碼

#ifndef 如果宏沒有定義,則編譯下面代碼

#elif 如果前面的#if給定條件不為真,當前條件為真,則編譯下面代碼

#endif 結束一個#if......#else條件編譯塊

#error 停止編譯並顯示錯誤信息

什麽是預處理指令?

預處理指令是以#號開頭的代碼行。#號必須是該行除了任何空白字符外的第一個字符。#後是指令關鍵字,在關鍵字和#號之間允許存在任意個數的空白字符。整行語句構成了一條預處理指令,該指令將在編譯器進行編譯之前對源代碼做某些轉換。預處理指令是在編譯器進行編譯之前進行的操作.預處理過程掃描源代碼,對其進行初步的轉換,產生新的源代碼提供給編譯器。可見預處理過程先於編譯器對源代碼進行處理。預處理過程讀入源代碼,檢查包含預處理指令的語句和宏定義,並對源代碼進行響應的轉換。預處理過程還會刪除程序中的註釋和多余的空白字符。

工作中經常這樣使用宏:

1. 常常使用宏來調試代碼

#if 0

///< 舊的代碼(或函數) (舊的代碼, 將會被預處理的時候,屏蔽掉, 不進行編譯)

#else

///< 新的代碼(或函數)

#endif

#ifndef JOE_DEBUG

///< 新的代碼(或函數)

#else

///< 舊的代碼(或函數) (舊的代碼, 將會被預處理的時候,屏蔽掉, 不進行編譯)

#endif

#ifdef Q_DEBUG

///< 新的代碼(或函數)

#else

///< 舊的代碼(或函數) (舊的代碼, 將會被預處理的時候,屏蔽掉, 不進行編譯)

#endif<br><br>

  通過以上類似的方法, 可以防止由於過多的修改代碼, 而把代碼修改的一塌糊塗. 建議修改代碼的時候, 做到保護好以前的代碼, 盡量不進行代碼的刪除操作. 要養成使用宏和註釋代碼的習慣.

  2. 使用宏來根據不同的平臺包含不同的文件. 很多時候, 我們的代碼是需要跨系統平臺編譯和運行的. 比如: 一個小功能代碼,

需要既可以在Win下面運行, 還要可以在Max, linux上面運行. 可是, 因為系統的不一樣, 有些時候, 頭文件的包含的名字是不一樣的.

所以,這時候, 就是用到了宏. 因為我們使用編程工具分不同的系統平臺, 編程工具自身的環境就會包含不同平臺的系統宏, 假設OS_Win,

OS_Mac, OS_Linux 分別代碼三種系統不同的宏. 而且,Win版本的編程工具中已經定義了OS_Win, 類似的Mac下,

編程工具定義的是OS_Mac, Linux...

#ifdef OS_Win

#include <windows.h>

#endif

#ifdef OS_Mac

#include <mac.h>

#endif

#ifdef OS_Linux

#include <linux.h>

#endif

/** 不僅使用在頭文件的包含. 而且,對於不同的系統平臺. 你也可以使用不同的代碼結構. */

c++ 預處理指令#define, #endif...