程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> 詳解C說話中的#define宏界說敕令用法

詳解C說話中的#define宏界說敕令用法

編輯:關於C++

詳解C說話中的#define宏界說敕令用法。本站提示廣大學習愛好者:(詳解C說話中的#define宏界說敕令用法)文章只能為提供參考,不一定能成為您想要的結果。以下是詳解C說話中的#define宏界說敕令用法正文


#define
敕令#define界說了一個標識符及一個串。在源法式中每次碰到該標識符時,均以界說的串代換它。ANSI尺度將標識符界說為宏名,將調換進程稱為宏調換。敕令的普通情勢為:

#define identifier string

留意:
1.該語句沒有分號。在標識符和串之間可以有隨意率性個空格,串一旦開端,僅由一新行停止。
2.宏名界說後,便可成為其它宏名界說中的一部門。
3.宏調換僅僅是以文本串取代宏標識符,條件是宏標識符必需自力的辨認出來,不然不停止調換。例如:
#define XYZ this is a tes
應用宏printf("XYZ");//該段不打印"this is a test"而打印"XYZ"。由於預編譯器辨認出的是"XYZ"
4.假如串擅長一行,可以在該行末尾用一反斜槓' \'續行。
#defineLONG_STRING"this is a very long\
string that is used as an example"
5.C說話法式廣泛應用年夜寫字母界說標識符。
6.用宏代換取代其實的函數的一年夜利益是宏調換增長了代碼的速度,由於不存在函數挪用的開支。但增長速度也有價值:因為反復編碼而增長了法式長度。

宏界說的留意事項
試圖應用宏去界說正文符號是不可的,例如以下代碼:

#define BSC //
#define BMC /*
#define EMC */
BSC my single-line comment
BMC my multi-line comment EMC

由於正文先於預處置指令處置,當睜開這些宏界說的時刻天然會湧現一堆毛病。
宏界說表達式的時刻必定不克不及小氣括號。這個不消說明了。
宏界說的時刻宏名中最好不要有空格。上面的界說會帶來許多費事:

  #define SUM (x) ((x)*(x))

一旦應用了#undef撤消宏,則前面的代碼都不克不及應用這個宏,除非再次界說。另外,假如沒有#undef的情況下就直接再次界說,後來的界說會籠罩失落後面的界說。上面代碼中的c值是4:

  #include <stdio.h>
 
  #define X 3
  #define Y X*2
  #undef X
  #define X 2
 
  int c = Y;
 
  int main(int argc, char** argv){
    printf("%d",c) ;
    return 0;
  }

宏僅在應用的時刻睜開,不然即便界說有成績,也不會編譯失足。假如把下面代碼中的第二個#define正文失落,並把C的值賦值為0,即撤消了X界說,也不會報錯,由於沒有應用Y,也就不會睜開。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved