日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

C++ #define详解

發布時間:2023/12/15 c/c++ 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C++ #define详解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1.#define 的作用

在C或C++語言源程序中允許用一個標識符來表示一個字符串,稱為“宏”。被定義為“宏”的標識符稱為“宏名”。在編譯預處理時,對程序中所有出現的“宏名”,都用宏定義中的字符串去代換,這稱為“宏代換”或“宏展開”。宏定義是由源程序中的宏定義命令完成的。宏代換是由預處理程序自動完成的。

在C或C++語言中,“宏”分為有參數和無參數兩種。

  • 無參宏定義
  • 無參宏的宏名后不帶參數。

    其定義的一般形式為:

    #define 標識符 字符串

    其中的“#”表示這是一條預處理命令。凡是以“#”開頭的均為預處理命令?!癲efine”為宏定義命令?!皹俗R符”為所定義的宏名?!白址笨梢允浅?、表達式、格式串等。

    例如:

    #define M (a+b)

    它的作用是指定標識符M來代替表達式(a+b)。在編寫源程序時,所有的(a+b)都可由M代替,而對源程序作編譯時,將先由預處理程序進行宏代換,即用(a+b)表達式去置換所有的宏名M,然后再進行編譯。

    程序1:

    復制代碼
    #define M (a+b)

    main(){

    int s,y;

    printf("input a number: ");

    scanf("%d",&y);

    s=M*M;

    printf(“s=%d\n”,s);
    }
    復制代碼
      上例程序中首先進行宏定義,定義M來替代表達式(a+b),在 s= M * M 中作了宏調用。在預處理時經宏展開后該語句變為: S=(a+b)*(a+b)

    但要注意的是,在宏定義中表達式(a+b)兩邊的括號不能少。否則會發生錯誤。

    如當作以下定義后:#difine M (a)+(b)

    在宏展開時將得到下述語句:S= (a)+(b)*(a)+(b)

    對于宏定義還要說明以下幾點:

    1. 宏定義是用宏名來表示一個字符串,在宏展開時又以該字符串取代宏名,這只是一種簡單的代換,字符串中可以含任何字符,可以是常數,也可以是表達式,預處理程序對它不作任何檢查。如有錯誤,只能在編譯已被宏展開后的源程序時發現。

    2. 宏定義不是說明或語句,在行末不必加分號,如加上分號則連分號也一起置換。

    3. 宏定義必須寫在函數之外,其作用域為宏定義命令起到源程序結束。如要終止其作用域可使用#undef命令。

  • 帶參宏定義
  • c語言允許宏帶有參數。在宏定義中的參數稱為形式參數,在宏調用中的參數稱為實際參數。對帶參數的宏,在調用中,不僅要宏展開,而且要用實參去代換形參。

    帶參宏定義的一般形式為:

    #define 宏名(形參表) 字符串

    在字符串中含有各個形參。

    帶參宏調用的一般形式為:

    宏名(形參表)

    例如:

    #define M(y) ((y)(y)+3(y)) /宏定義/

    k=M(5); /宏調用/

    在宏調用時,用實參5去代替形參y,經預處理宏展開后的語句為:

    k=55+35

    程序2:

    復制代碼
    #define MAX(a,b) (a>b)?a:b

    main(){

    int x,y,max;

    printf("input two numbers: ");

    scanf("%d%d",&x,&y);

    max=MAX(x,y);

    printf(“max=%d\n”,max);

    }
    復制代碼
      上例程序的第一行進行帶參宏定義,用宏名MAX表示條件表達式(a>b)?a:b,形參a,b均出現在條件表達式中。程序第七行max=MAX(x,y)為宏調用,實參x,y,將代換形參a,b。宏展開后該語句為:

    max=(x>y)?x:y;

    用于計算x,y中的大數。

    4.防止重復定義

    #define 條件編譯

    頭文件(.h)可以被頭文件或C文件包含;

    重復包含(重復定義)

    由于頭文件包含可以嵌套,那么C文件就有可能包含多次同一個頭文件,就可能出現重復定義的問題的。

    通過條件編譯開關來避免重復包含(重復定義)

    例如

    #ifndef headerfileXXX

    #define headerfileXXX

    文件內容

    #endif
    轉載 https://www.cnblogs.com/shmilxu/p/4837373.html

    總結

    以上是生活随笔為你收集整理的C++ #define详解的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。