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

■ マクロ(define.macro)





___

■ WIN32_LEAN_AND_MEAN

DESC コンパイラにヘッダーからあまり使われない関数を省くように指示する。 軽くなるしれない。
___

■ WIN32

DESC VisualStudio の Project に Default で定義されている /D WIN32 _WIN32 とは異なる
___

■ Microsoft 固有のマクロ

DESC Microsoft 固有というのは Microsoft の Compiler を使ったことのとき
___

■ _WIN64

DESC platform x64 で有効になるマクロ
    // ポインタ型のサイズを 64 32 bit 環境で切り替える
    #ifdef  _WIN64
    typedef unsigned __int64    uintptr_t;
    #else
    typedef _W64 unsigned int   uintptr_t;
    #endif
___

■ _WIN32

DESC Win32 用アプリケーションに対して定義されます 常に定義されます Commpiler の CommandLine からは見えない しかし次のようにチェックすると, 定義されている


    // foo.c
    #include< stdio.h>
    int main() 
    {
    #ifdef _WIN32
      printf( "Defined" );     // cl はこちら
    #else 
      printf( "Not Defined" );  // gcc( cygwin はこちら )
    #endif
      return 0;
    }

___

■ ANSI C標準

___

■ __FILE__.__LINE__

ファイル名, 行数に置換される
___

■ __TIME__.__DATE__

日付、時刻に置換される。
___

■ 定義済みマクロ

VisualStudio ( cl.exe )固有の定義すみマクロは以下のものがある。
___

■ _WIN32

Win32 用アプリケーションに対して常に定義される。 検証用のコード。 CRT も含めて一切ヘッダをインクルードしないようにする。
    #ifdef _WIN32
      #error( "_WIN32 defined" )
    #endif

    int main() {
      return 0;
    }
ビルドして実行してみる。
    cl test.cpp && .\test.exe
___

■ _MSC_VER

DESC コンパイラバージョンを定義する。 Visual C++ 6.0 以降に対して 1200 以上として常に定義される。 POINT また VisualStudio 固有のプラグマを利用する時の環境の判定にも使える。
    #ifdef _MSC_VER
    #  pragma warning( push )
    #  pragma warning( disable : 4530 )
    #  pragma warning( disable : 4786 )
    #endif
___

■ デバッグ用マクロ

___

■ _DEBUG

_ASSERTE などのデバッグ用のマクロ展開の切り替えに利用される。 windows.h などで定義されている デバッグ関数を利用するときは、このマクロを定義する必要がある。
___

■ NDEBUG

DESC assert.h 内で assert マクロの展開を制御するためにユーザーが自分で定義するマクロ。 VisualStudio では Release 構成でこのマクロが有効になっている。 アサートを処理を無効化する。
    cl /D"NDEBUG" test.cpp

    #include< assert.h> 
    assert( !"test" );
___

■ 文字コード指定

___

■ UNICODE

使用する文字の文字コードを unicode に変更する場合に定義するマクロ。 UNICODEを定義してコンパイルすると unicode 用の関数が利用される。 ( VisualStudio 2008 環境 ) cl /P /D"UNICODE" test.cpp
    MessageBoxW( 0, s, s, 0x00000000L );
cl /P test.cpp
    MessageBoxA( 0, s, s, 0x00000000L );
___

■ _WIN32_WINNT

XP 固有機能を使う
___

■ WIN32

DESC Defined for WIN32 applications. Always defined. Microsoft specific
    // gcc   -E   main.cpp
    #include< windows.h> 

    #ifdef _WIN32 
        DEFINE _WIN32         // こっちが残る
    #else 
        NOT DEFINE _WIN32
    #endif

___

■ __WINDLL

_WINDLL Windows protected-mode dynamic-link library is selected with /GD.
___

■ __MINGW__

DESC コンパイラ判別用のマクロ。 MinGW 環境で Build すると Define される コンパイラを識別するために使う
___

■ __WIN32

cl gcc __WIN32 ○ × WIN32 × ×
___

■ DLL

DESC
___

■ __DEBUG

DESC Debug Build の Default MACRO stdio.h にも 定義されている
___

■ _LIB

DESC StaticLibrary のプロジェクトに設定されるマクロ。 cl -o main.exe ./main.cpp testlib.lib /IMPLIB:test.lib

      
    // obj をつくる ( Compile のみする )
    cl /c mod.cpp

    // Archive する
    lib mod.obj
    lib mod.obj /out:mod.lib

    
    // 同一の Symbol があれば ERROR ( と思ったら WARNING )

    
    libA.obj : warning LNK4006: 
    "void __cdecl subA(void)" (?subA@@YAXXZ) は libB.obj で定義されています。
    2 つ目以降の定義は無視されます。

    libA.obj : warning LNK4221: パブリック シンボルが見つかりませんでした。アーカイブ メンバにアクセスできません。
    lib libA.obj  libB.obj

    // libA.cpp
    void subA() {}

    // libB.cpp
    void subA() {}


    namespace で修飾すれば OK
    namespace bar {
    namespace foo {
      void subA(){}
    }
    }


    // こういう名前で変換される
    $nm libB.obj 
    00000000 T ?subA@foo@bar@@YAXXZ

    //  obj, lib( obj のセット )は symbol がある
    // しかし exe ( 実行 file )は存在しない
    // これは Linker の立場からすると 名前引きをしているということ
    
    // 一度, 結合( 完成 )すれば , 名前を書いておく必要がない
    //  Symbol と Debug 情報は異なる

















NINJAIDX 15