常見的預處理指令:
1、#include 包含頭文件(頭文件一般包含函數原型與全局變量)
形式常有下面兩種
#include<iostream> 引用標准頭文件,只搜索標准庫頭文件的默認目錄#include “myheader.h”
引用自定義的頭文件,搜索正在編譯的源文件所在的目錄,找不到時再搜索包含標准庫頭文件的默認目錄2、#define 定義符號、宏
如:#define PI 3.1415925 // 定義符號常量PI為3.1415925,後面不加分號
在編譯前,預處理器會遍歷代碼,在它認為置換有意義的地方,用字符串PI的定義值(3.1415925)來代替,在注釋或字符串中的PI不進行替換
#undef刪除#define定義的符號
如:
#define PI 3.14159265
......
// 之間所有的PI都可以被替換為3.14159265
#undef PI
//之後不再有PI這個標識符
但是在C++中最好使用const來定義變量,如上面的定義可改為:
const long double PI=3.1415925;
兩者比較下,前者沒有類型的指定,容易引起不必要的麻煩,而後者定義清楚,所以在C++中推薦使用const來定義常量
#define的缺點:
1)不支持類型檢查
2)不考慮作用域
3)符號名不能限制在一個命名空間中
3、#indef,#ifndef,#endif
#ifdef 如果宏被定義就進行編譯 #ifndef 如果宏未被定義就進行編譯 #endif結束編譯塊的控制
4、#if,#else
#if 表達式非零就對代碼進行編譯 #else 作為if為假的選項對代碼進行編譯5、#error
輸出一個錯誤信息
6、#pragma
為編譯程序提供非常規的控制流信息