コンパイラ、オペレーティングシステム、CPU関連のプリプロセッサマクロ定義

5617 ワード

疑問一、How to list compler prefined macros?
    コンパイラプリプロセッサのマクロ定義の用途:    参考: http://nadeausoftware.com/articles/2011/12/c_c_tip_ホリスト.compler_prefined_マクロス    摘要:All C/C+complers prefine macros indicating the target processor、operating system、langage feature、compler name and version、and more.Cross-plotform code can use  #if/#endif トwrap OS-specific #include s(such as)   v.s.  )、compler-specific code、or processor-specific optimizations(such as SSE instructions on x 86). 
     コンパイラの前処理マクロ定義は、プラットフォームにまたがって動作するようにプログラムを使用し、コンパイラ(典型的にはG+++VS VISUAL C++)を含み、オペレーティングシステム(典型的にはlinux vs mac vs windows)を横断し、CPU(典型的なarm vs x 86)を跨ぎ、特定のコードを特定の環境に使用することができる.アルゴリズム開発は、複数の動作環境を考慮する必要がある場合、これらのプリプロセッサマクロ定義を採用することができる.
前処理マクロ定義方法を取得します.
 1.コマンドラインを使用する:
编译器、操作系统、CPU相关的预处理宏定义_第1张图片
    テスト:UBUTNTU 14.04 LTS+GCC 4.8.2+intel cpu環境で、コマンドgcc-dM-E-x/dev/nullを使用します. いくつかの有用なマクロ定義値が得られ、たとえば、(各行内のマクロ定義が非常に似ているかまたは関連付けられている):
        #define_unix_u1   #define_unix 1  #define unix 1  (UNIXシステム)
        #define_ペntiumpro.1(CPU TYPE)
        #define_linux 1 #define_linux_.1 #define_gnulinux_.1  #define linux 1 (LINUXシステム)
        #define_GNUC4   #define_GNUCMINOR_ひ8 (GNU GCC/G+)
        #define_stdC_う1(コンパイラはANSI Cに従うと、値は1に割り当てられます. 『Cと針』から抜粋する)
        #define_i 686 1  #define_i 686_u1  #define_i 386 1   #define_i 386_u1    #define i 386 1  (CPU TYPE)  
2.ソースコードを表示する:
Clang and LLVM source code is available for free download from llvm.org. Once downloaded、OS and processor macros are defined in  llvm/tools/clang/lib/Basic/Targets.cpp.
GCC and G++source code is available for free download from gnu.org. Once downloaded、OS and processor macros are defined in  gcc/config/*.
3.種類のUNIXシステムでは、strigsコマンドを使用しています.strigs/usr/bin/gccでは、前処理マクロ定義が得られます.
    テスト:UBUTNTU 14.04 LTS+GCC 4.8.2+intel cpu環境下で、コマンドを使用します. strigs/usr/bin/gcc いくつかの有用なマクロ定義値が得られ、例えば、
    __FILE_ひゅうLINEですDATE__u_u uTIMEstdC_う  「Cとポインタ」プリプロセッサセクションは、これらのマクロ定義について詳細に説明しています.
疑問二、How to detect the compler name and version using compler prefined macros?
この記事を参考にして、マクロ定義を利用してクロスコンパイラコードを実現する方法を紹介しました.http://nadeausoftware.com/articles/2012/10/c_c_tip_ホdetect_.compler_name_and_ヴェシオンアメリカ.compler_prefined_マクロス
编译器、操作系统、CPU相关的预处理宏定义_第2张图片
编译器、操作系统、CPU相关的预处理宏定义_第3张图片
     実際に使用しているクロスの比較的多いコンパイラはGNU GCC/G++とMSVC++であるかもしれません.この場合はコンパイルにまたがることができます.
ヽoo df defined(__u_GNUC_u u_) 

湖南省にある地名
ヽoo.defined(_MSCuVER)

湖南省にある地名
疑問三、How to detect the operating system type using compler prefined macros?
この記事を参照してください.マクロ定義を利用して、オペレーティングシステムのコードを横断する方法を紹介します.各コンパイラの下で、異なるオペレーティングシステムの下で、プリプロセッサマクロ定義が含まれています.
http://nadeausoftware.com/articles/2012/01/c_c_tip_ホアメリカ.compler_prefined_マクロスdetect_.operating_system
编译器、操作系统、CPU相关的预处理宏定义_第4张图片
编译器、操作系统、CPU相关的预处理宏定义_第5张图片
编译器、操作系统、CPU相关的预处理宏定义_第6张图片 
     筆者が一番多く使っているのはLINUXオペレーティングシステムとWINDOWオペレーティングシステムです.オペレーティングシステムのプログラミングに関しては、マクロ定義はunixとなります. 及びWIN 32.
疑問四、How to detect the processor type using compler prefined macros?
この記事を参考に、様々なCPUタイプのマクロ定義を紹介します.
http://nadeausoftware.com/articles/2012/02/c_c_tip_ホdetect_.プロシーザータイプアメリカ.compler_prefined_マクロス
编译器、操作系统、CPU相关的预处理宏定义_第7张图片
 CPUに対してコードを作成すれば、この部分のマクロ定義を利用することができる.
疑問五、プリプロセッサのマクロ定義を補充して、ソースコードの学習とクロスプラットフォームコードの開発に用います.
参考:
http://sourceforge.net/p/predef/wiki/Home/
もっと詳しい資料が含まれています.しかし、資料が古いので、各種コンパイラの公式文書を確認することをお勧めします.