首頁>Club>
7
回覆列表
  • 1 # aifue24779

    格式:#define宏名(引數表) 字串例如:#define S(a,b) a*barea=S(3,2);第一步被換為area=a*b; ,第二步被換為area=3*2;類似於函式呼叫:(1)實參如果是表示式容易出問題#define S(r) r*rarea=S(a+b);第一步換為area=r*r;,第二步被換為area=a+b*a+b;正確的宏定義是#define S(r) ((r)*(r))(2)宏名和引數的括號間不能有空格(3)宏替換隻作替換,不做計算,不做表示式求解(4)函式呼叫在編譯後程序執行時進行,並且分配記憶體。宏替換在編譯前進行,不分配記憶體(5)宏的啞實結合不存在型別,也沒有型別轉換。(6)函式只有一個返回值,利用宏則可以設法得到多個值(7)宏展開使源程式變長,函式呼叫不會(8)宏展開不佔執行時間,只佔編譯時間,函式呼叫佔執行時間(分配記憶體、保留現場、值傳遞、返回值)

  • 2 # 使用者2458317293922

    #define CHANGE(a,b,t) t=a;a=b;b=t //定義一個宏,帶有引數a,b,t,將a,b值透過t來交換,b=a錯了

    main()

    {

    int c,d,s;

    scanf(%d,%d),&c,&d);

    CHANGE(c,d,s)

    printf("c=%d,d=%d/n",c,d);

    }

  • 中秋節和大豐收的關聯?
  • 《聖墟》的主要人物有哪些?