1.預處理函數
可使用預處理和具備預處理的功能是C語言和其餘高級語言的區別之一。編碼
宏定義spa
宏定義是預處理命令的一種,它提供了一種能夠替換源代碼中字符串的機制。code
宏定義的類型blog
能夠簡單分爲有參數宏定義,和無參數宏定義。內存
(1)不帶參數宏定義字符串
語法:#define 宏名 字符串input
demo:1 # define Y "ZYY" io
詳解:class
注意:宏定義不是C語言,不須要在末尾加分號.
宏名定義之後也能夠成爲其餘宏名定義的一部分
demo: # define PI 3.1415
# define PI2 PI*PU
注意:若是字符串中含有宏名的話則不會被替換
#undef 能夠用來終止宏定義的做用範圍
語法: #undef 宏名
(2)帶參數的宏定義
帶參數的宏定義不是簡單的字符串替換,還要進行參數替換 通常形式以下:
#define 宏名(參數) 字符串
demo:
1 # include <stdio.h> 2 # include <stdlib.h> 3 # define MIX(a,b) ((a)*(b)+(b)) 4 int main () 5 { 6 int x = 5,y = 9; 7 printf("x,y:\n"); 8 printf("%d,%d\n",x,y); 9 printf("the main number is %d\n",MIX(x,y)); 10 return 0; 11 }
用宏定義來代替函數的好處是能夠增長代碼的執行速度,由於不存在函數的調用,缺點是因爲重複編碼,增長了程序的長度
注意:
宏定義時參數要加括號,如不加括號,則有時結果是正確的,有時結果倒是錯誤的
宏擴展必須使用括號來保護表達式中低優先級的操做符號,以確保調用時達到想要的效果
在帶參數宏定義中,形式參數不分配內存單元,沒必要做類型定義
在宏定義中,宏名與帶參數的括號之間不能夠加空格,不然會將空格之後的字符都做爲替代字符串的一部分
2.#include指令
在一個源文件中可使用#include指令將另外一個源文件的所有內容包含進來
demo:
1 # include <stdio.h> 2 # include "stdio.h"
上面給出了<> 尖括號 ""和雙引號兩種形式,它們是有必定的區別的
1)尖括號
系統到存放C庫函數頭文件所在的目錄中尋找要包含的文件,這是標準的方式
2)雙引號
系統先到當前代碼文件所在的目錄下尋找要包含的文件,若是找不到,再到存放C庫函數頭文件所在的目錄中尋找
demo:
f1.h
1 # define P printf 2 # define S scanf 3 # define D "%d" 4 # define C "%c" 5
f2.cpp
1 # include <stdio.h> 2 # include <stdlib.h> 3 # include "f1.h" 4 int main () 5 { 6 int a; 7 P("please input:\n"); //printf 8 S(D,&a);//scanf 9 P("The number is :\n"); //printf 10 P(D,a);// printf 11 P("\n"); //printf 12 return 0; 13 }
f1.h存放宏替換指令
f2.cpp 使用這些宏指令