トップページ
ひらく | たたむ | ページトップ
↓マウスで反転選択した文字を検索
C
   
ページ内検索 ページ外検索
検索したい文字を入力して
ENTERを押すと移動します。
\n
[ トップページ ]
[ ____CommandPrompt ] [ ____JScript ] [ ____MySQL ] [ ____Cygwin ] [ ____Java ] [ ____Emacs ] [ ____Make ] [ ____Perl ] [ ____Python ] [ ____OpenGL ] [ ____C# ] [ ____StyleSheet ] [ ____C++ ] [ ____Winsock ] [ ____Thread ] [ ____VisualStudio ] [ ____C ] [ ____Win32API ] [ ____Lua ] [ ____PhotoShop ]
ヘッダ検索
___

■ PreProcessor


___

■ undef

#define している変数を解除するマクロ展開されなくなる 二重定義の警告もでなくなる
___

■ ## : token 連結演算子

DESC token を連結する演算子 [ ## ] macro のみで有効 A ## B -> AB
    #define FOO( x ) FOO_## x
___

■ Define

DESC C PreProcessor により 文字列を置換する 置換するだけなので, 書き方は色々 sensitive ( MAX != max ) namespace 関係なし( -> 置換なので当たり前 ) つかいみち
    // data の "意味つけ" 名前をつける
    #define PI 3.14f


    // 一般化した別名( 置換えを想定 )
    //  変数としての役割
    #define NEW new
    #if _DEBUG
    # define NEW new( __FILE__, __LINE__)   // Debug 情報を仕込む
    #else
    # define NEW new
    #endif
# 引数つきマクロ # 条件, fall_back 処理 #define myassert( cnd, fall_back ) if ( !(cnd) ) { fall_back; } myassert( i == 0, return ); myassert( strcmp("foo" == s ) == 0 , return 0 ); // 環境ごとの違いを吸収する。 #define FASTCALL __fastcall #define ALIGN(n) __declspec(align(n))

    #define の連結記号は \ が行単位ゆえに空白の行でも \ が必要

    #define FUNC(cnd, fall_back) \
    if ( cnd ) {  \
      fall_back;  \
    }
   // 再定義 は WARNING
   #define PI   3.14
   #define PI   3.1

    // typedef の重複はエラー
    typedef unsigned char foo;
    typedef unsigned short foo;
POINT define の NEST OK PreProcessor の立場はこれ 置換対象があれば, 置換し続ける define の中で #define symbol の使用は OK

  #define TEST( d ) (int)( (d + d + d) / 3.0f )
  # define pi( exp ) printf( #exp" = %d     FILE: %s\n", exp, __FILE__  )

  // TEST(100) = 100     FILE: main.cpp
  // printf( "TEST(100)"" = %d     FILE: %s\n", (int)( (100 + 100 + 100) / 3.0f ), "main.cpp" );
  pi( TEST(100) );


  #define NEW(heap) NEW_IMPL(heap, 0, 0, 0)

typedef は namespace 有効 {} block 内でも OK POINT
  // if()文の中でマクロを使用した際にエラーを起こさない為
  #define MY_MESS(mess) do{ fprintf(stderr, mess);}while(0)

















NINJAIDX 16