C語言預處理

1.預處理函數

  可使用預處理和具備預處理的功能是C語言和其餘高級語言的區別之一。編碼

宏定義spa

  宏定義是預處理命令的一種,它提供了一種能夠替換源代碼中字符串的機制。code

宏定義的類型blog

  能夠簡單分爲有參數宏定義,和無參數宏定義。內存

(1)不帶參數宏定義字符串

  語法:#define 宏名 字符串input

   demo:1 # define Y "ZYY" io

  詳解:class

  1.   # 表示這是一條預處理命令
  2.   宏名是一個標識符,必須符合C語言標識符的規定
  3.   字符串 這裏能夠是常數,表達式,格式字符串等。

注意:宏定義不是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 使用這些宏指令

相關文章
相關標籤/搜索