C言語独学完備マニュアル(18)——マクロ


カスタムViewシリーズチュートリアル00–自分と過去を覆し、カスタムViewカスタムViewシリーズチュートリアル01–共通ツール紹介カスタムViewシリーズチュートリアル02–onMeasureソース詳細分析カスタムViewシリーズチュートリアル03–onLayoutソース詳細分析カスタムViewシリーズチュートリアル04–Drawソース分析およびその実践カスタムViewシリーズチュートリアル05–カスタムViewシリーズチュートリアル06の例分析–ViewのTouchイベントの詳細理カスタムViewシリーズチュートリアル07–詳細View Group配布TouchイベントカスタムViewシリーズチュートリアル08–スライド競合の発生とその処理
Androidソフトキーボードの難病を探求Android非同期の精髄Handler Androidの主流フレームワークの不可欠な基盤を詳しく理解ソースコードの肩に立ってScrollerの動作メカニズムを完全に理解する
Androidマルチ解像度アダプティブフレームワーク(1)—コアベースAndroidマルチ解像度アダプティブフレームワーク(2)—原理解析Androidマルチ解像度アダプティブフレームワーク(3)—使用マニュアル
著作権声明
  • 本文オリジナル作者:谷哥の弟
  • 作者のブログアドレス:http://blog.csdn.net/lfdfhl

  • オブジェクトマクロ
    構文の概要:
    #define a b
    作用:aをbに置き換える
    例は次のとおりです.
    #include 
    #include 
    
    #define NUMBER 5
    int main()
    {
        int i;
        for(i=0;i"i=%d
    ",i); } return 0; }

    実行結果:
    i=0
    i=1
    i=2
    i=3
    i=4
    
    Process returned 0 (0x0)   execution time : 1.179 s
    Press any key to continue.

    マクロNUMBERを定義することで、プログラムコンパイル実行時にNUMBERを5に置き換えます.
    注意:
  • マクロ名は一般的に大文字
  • を採用する.
  • マクロを定義する文の末尾にセミコロンがありません(;)
  • オブジェクトマクロは、文字列の字面量および文字定数の一部を置換するために使用することはできない
  • .
  • オブジェクトマクロは、変数名などの識別子の一部を置換するために使用することができない
  • .
    関数マクロ
    まず練習します:関数を利用して整数と小数の平方値を求めます
    コードは次のとおりです.
    #include 
    #include 
    int sqr_int(int x){
        return x*x;
    }
    
    double sqr_double(double y){
        return y*y;
    }
    
    int main()
    {
        int x;
        double y;
        x=sqr_int(5);
        y=sqr_double(1.3);
        printf("     :%d %f",x,y);
        return 0;
    }
    

    この例では、整数の平方と小数の平方をそれぞれ計算する2つの関数を書きます.実は、それらの本質は同じです.2つの数を乗算して結果とします.違いはデータ型の違いにあります.この場合、関数マクロを使用してコードの最適化を行うことができます.コードは次のとおりです.
    #include 
    #include 
    
    #define sqr(x) ((x)*(x))
    
    int main()
    {
        int x;
        double y;
        x=sqr(5);
        y=sqr(1.3);
        printf("     :%d %f",x,y);
        return 0;
    }
    

    この例では、コード4行目の関数マクロを定義します.
    #define sqr(x) ((x)*(x))

    したがって、コード中のsqr(x)はすべて((x)*(x))に置き換えられる.たとえば、sqr(5)が((5)*(5))sqr(1.3)に置き換えられると(1.3)*(1.3))に置き換えられます.
    関数マクロとカンマ式
    C言語には、カンマ演算子(,)という特殊な演算子があります.この演算子は、次の2つの部分を接続するために使用されます.
    まず式1を求め、その後式2を求める.最終結果は式2の値です
    例えば、(3+5,6+8)まず3+5の値を8とし、6+8の値を14とする.最終結果は14
    (a=2*5,a*4)まずa=2*5を求めてaの値を得るのは10で、更にa*4の値を求めるのは40です;最終的な結果は40
    カンマ式ノット:
  • カンマ式左から右の順に
  • を計算
  • カンマ式の最終結果は、最後の式の計算値
  • です.
  • カンマ式は、すべての演算子の優先度が非常に低い
  • です.
    カンマ式が分かったら、関数マクロとカンマ式の適用を見てみましょう.コードは次のとおりです.
    #include 
    #include 
    
    #define puts_alert(str) (puts("    :"),puts(str))
    
    int main()
    {
        printf("        :
    "
    ); int number; scanf("%d",&number); if(number==0){ puts_alert(" 0"); }else{ puts_alert(" 0"); } return 0; }