- Qt 4開發實踐
- 鄭阿奇主編
- 227字
- 2018-12-29 21:50:12
1.2 C++預處理
和C語言一樣,C++預處理命令也有三種:宏定義命令、文件包含命令、條件編譯命令。這些命令在程序中都是以“#”來引導的,每一條預處理命令必須單獨占用一行,但在行尾不能有分號“;”。
1.2.1 宏定義命令
用#define可以定義一個符號常量,如:
#define PI 3.141593
這里的#define就是宏定義命令,它的作用是將3.141593用PI代替,PI稱為宏名。需要注意的是:
(1) #define、PI和3.141593之間一定要有空格,且一般將宏名定義成大寫,以便與普通標識符相區別。
(2) 宏被定義后,一般不能再重新定義,而只有當使用如下命令時才可以重新定義:
#undef 宏名
(3) 一個定義過的宏名可以用來定義其他新的宏。
(4) 宏還可以帶參數,例如:
#define MAX(a,b) ((a)>(b)?(a):(b))
其中(a,b)是宏MAX的參數表,如果在程序中出現下列語句:
x = MAX(3, 9);
則預處理后變成:
x = (3>9?3:9); // 結果為9
很顯然,帶參數的宏相當于一個函數的功能,但卻比函數簡捷。
1.2.2 文件包含命令
所謂“文件包含”是指將另一個源文件的內容合并到源程序中。C/C++語言提供了#include命令用來實現文件包含的操作,它有如下兩種格式:
#include <文件名> #include “文件名”
文件名一般以.h為擴展名,因而稱它為“頭文件”,如前面的程序例子中iostream.h是頭文件的文件名。“文件包含”的兩種格式中,第一種格式是將文件名用尖括號“< >”括起來的,用來包含那些由系統提供的并放在指定子目錄中的頭文件。第二種格式是將文件名用雙引號括起來,用來包含那些由用戶定義的放在當前目錄或其他目錄下的頭文件或其他源文件。
1.2.3 條件編譯命令
一般情況下,源程序中所有的語句都參加編譯。但有時也希望根據一定的條件去編譯源文件的不同部分,這就是“條件編譯”。條件編譯使得同一源程序在不同的編譯條件下得到不同的目標代碼。C/C++提供的條件編譯命令有下列幾種常用的形式:
格式1:
#ifdef <標識符> <程序段1> [ #else <程序段2> ] #endif
其中,#ifdef、#else和#endif都是關鍵字,<程序段>是由若干條預處理命令或語句組成的。這種形式的含義是:如果標識符已被#define命令定義過,則編譯<程序段1>,否則編譯<程序段2>。
格式2:
#ifndef <標識符> <程序段1> [ #else <程序段2> ] #endif
這與前一種形式的區別僅在于,如果標識符沒有被#define命令定義過,則編譯<程序段1>,否則就編譯<程序段2>。
格式3:
#if <表達式1> <程序段1> [ #elif <表達式2> <程序段2> ] [ #else <程序段n> ] #endif
其中,#if、#elif、#else和#endif是關鍵字。它們的含義是,如果<表達式1>為“真”就編譯<程序段1>;否則如果<表達式2>為“真”就編譯<程序段2>,…;如果各表達式都不為“真”就編譯<程序段n>。