• <output id="aynwq"><form id="aynwq"><code id="aynwq"></code></form></output>

    <mark id="aynwq"><option id="aynwq"></option></mark>
  • <mark id="aynwq"><option id="aynwq"></option></mark><label id="aynwq"><dl id="aynwq"></dl></label>
  • 學(xué)習(xí)啦 > 學(xué)習(xí)英語 > 專業(yè)英語 > 計(jì)算機(jī)英語 > c語言defined的用法

    c語言defined的用法

    時(shí)間: 長(zhǎng)思709 分享

    c語言defined的用法

      C語言中的#define命令在使用過程中的常見問題,分析了問題產(chǎn)生的原因并提出了解決方法,從編譯程序?qū)源程序的處理過程闡述宏展開的時(shí)機(jī),力求從根本上對(duì)宏定義進(jìn)行闡述,并在最后指出使用宏定義的優(yōu)點(diǎn),以促使對(duì)宏定義使用的重視。 下面小編就跟大家介紹下c語言defined的用法。

      1.簡(jiǎn)單的宏定義

      #define 標(biāo)識(shí)符 替換列表(替換列表可以是數(shù),字符串字面量,標(biāo)點(diǎn)符號(hào),運(yùn)算符,標(biāo)識(shí)符,關(guān)鍵字,字符常量。注意:替換列表是可以為空的)

      典型錯(cuò)誤:

      #define N = 100

      int a[N]; /*這樣會(huì)成為int a[= 100],這里會(huì)處理成為一種標(biāo)識(shí)記號(hào)一樣*/

      #define N 100;

      int a[N]; /*帶分號(hào)的定義會(huì)成為int a[100;],這是一種很常見的錯(cuò)誤*/

      #define pin (int*);

      pin a,b;

      int* a,b; /*本意是a和b都是int型指針,但是實(shí)際上變成int* a,b;a是int型指針,而b是int型變量。這是應(yīng)該使用typedef來代替define,這樣a和b就都是int型指針了。*/

      典型的使用方法:

      使用宏定義我們可以自己根據(jù)自己的習(xí)慣來定義甚至改變C語言的語法習(xí)慣,例如:

      #define BEGIN {

      #define END }

      int main()BEGIN

      printf ("DEFINE----\n");

      END

      定義一個(gè)循環(huán)

      #define LOOP for(;;)

      重新定義數(shù)據(jù)類型

      #define IT int

      2.帶參數(shù)的宏

      #define 標(biāo)識(shí)符(x1,x2,x3...xn) 替換列表 (注意:x1,x2,x3..是宏的參數(shù),標(biāo)識(shí)符和其左括弧之間不能有空格)

      使用方法:

      #define MAX(x,y) ((x)>(y)?(x):(y))

      i=MAX(j+k,m-n);

      替換為:

      i=MAX((j+k)>(m-n)?(j+k):(m-n));

      #define SI_EX(n) ((n)%2==0)

      if(SI_EX(i)) i++;

      替換為:

      if(SI_EX((i)%2==0))

      通過以上例子我們可以看出,標(biāo)識(shí)符帶參數(shù)(X1,X2,X3.....)在替換時(shí)會(huì)被替換列表(Y1,Y2,Y3....)對(duì)應(yīng)的替換,但是和順序無關(guān)。

      3.宏的特殊單行定義

      #define A(x) T_##x

      #define B(x) #@x

      #define C(x) #x

      x=1

      替換為:

      A(1)------> T_1 (T_##x,##符號(hào)是記號(hào)粘黏符號(hào),將前后的字符粘黏起來。)

      B(1)------> '1' ( #@x , #@ 符號(hào)會(huì)將宏的參數(shù)進(jìn)行字符串字面量化,并且加‘’號(hào))

      C(1)------> "1" ( #x ,#符號(hào)會(huì)將宏的參數(shù)進(jìn)行字符串字面量化,并且加""號(hào))

      4.define的多行定義

      define可以替代多行的代碼,在每一個(gè)換行的時(shí)候加上一個(gè)"\"

      #define MAX(X,Y) do { \

      語句1; \

      語句2; \

      /* 注釋的寫法 */ \

      } while(0) /* (no trailing ; ) */ \

      5.在大規(guī)模的開發(fā)過程中,特別是跨平臺(tái)和系統(tǒng)的軟件里,define最重要的功能是條件編譯。

      #ifdef WINDOWS

      ......

      ......

      #endif

      #ifdef LINUX

      ......

      ......

      #endif

      可以在編譯的時(shí)候通過#define設(shè)置編譯環(huán)境

      6.取消宏

      #undef 標(biāo)識(shí)符

      7.條件編譯

      #ifdef XXX…(#else) … #endif

      8.預(yù)定義宏

      在C語言中收錄了一些有用的宏,這些宏是提供當(dāng)前編譯信息的。

      __LINE__ 被編譯文件的行數(shù)

      (整型)

      __FILE__ 被編譯文件的名字 (字符型)

      __DATE__ 編譯日期 (字符型)

      __TIME__ 編譯時(shí)間 (字符型)

      __STDC__ 如果編譯器接受標(biāo)準(zhǔn)C,那么值為1. (整型)

      通常我們?cè)诰幾g的時(shí)候我們可以用這些預(yù)定義的宏來進(jìn)行排錯(cuò),例如:

      一般情況下,當(dāng)出現(xiàn)除零的情況時(shí)編譯器是沒有提示的,我們可以自定義一個(gè)解決辦法。

      #define CHECKZERO(divisor)\

      if(divisor==0)\

      printf("***ATTEMPT TO DIVIDE BY ZERO IN LINE %d of file %s ***\n",__LINE__,__FILE__);\

      引用方法

      CHECKZERO(j);

      k=i/j;

    512470 主站蜘蛛池模板: 最近日本免费观看直播| 成人网站在线进入爽爽爽| ww亚洲ww在线观看国产| 亚洲欧美日韩国产一区二区三区精品 | 午夜无码国产理论在线| 无码人妻一区二区三区免费n鬼沢| 韩国一级做a爱性色毛片| 久久伊人男人的天堂网站| 国产乱人视频在线看| 插插无码视频大全不卡网站| 精品在线第一页| chinese国产在线视频| 亚洲欧洲日本在线观看| 国产熟女乱子视频正在播放| 最近日本免费观看直播| 青青草成人免费| 91最新地址永久入口| 亚洲人成在线播放网站岛国| 国产91在线看| 国产精品林美惠子在线观看| 日本理论片午夜论片| 紧缚调教波多野结衣在线观看| 一本色道久久88—综合亚洲精品| 四虎最新地址在线观看1080p| 很污很黄的网站| 波多野结衣mxgs-968| 色94色欧美一区| 老汉色老汉首页a亚洲| 草莓视频在线观| 狠狠躁日日躁夜夜躁2020| 国产精品无码无在线观看| 久久精品国产一区二区三区不卡 | 激情综合丝袜美女一区二区| 国产男女猛烈无遮挡免费视频| 丰满人妻被黑人中出849| 波多野结衣之cesd819| 国产成人aaa在线视频免费观看 | 在线视频国产99| 久久精品国产精品| 男女啪啪激烈高潮喷出GIF免费 | 亚洲伊人久久大香线蕉综合图片|