2011-01-01 8 views
4

Visual Studioを使用してWindows上でC/C++プログラムをコンパイルする場合(互換性を持たせようとしているコンパイラ)、あらかじめ定義されたマクロ_WIN32(ソース:http://msdn.microsoft.com/en-us/library/b0084kay.aspx)プラットフォーム固有のifdef-sについては、Linux/POSIXのプラットフォーム固有のマクロに関するドキュメント

私が探しているのは、Linuxでのanalogonです:私はLinux/POSIXと互換性があると主張するOSのためにコンパイルしていることを知らせるマクロです。

だから私はgccのドキュメントに見て、この発見:私のプログラムにhttp://gcc.gnu.org/onlinedocs/cpp/System_002dspecific-Predefined-Macros.html

応用し、次のマクロ(GCC 4.4.5 - Ubuntuの10.10は)(私は、重要なマクロをドロップしなかったことを願ってい有望に見えました):

#define __USE_BSD 1 
#define __unix__ 1 
#define __linux 1 
#define __unix 1 
#define __linux__ 1 
#define _POSIX_SOURCE 1 
#define __STDC_HOSTED__ 1 
#define __STDC_IEC_559__ 1 
#define __gnu_linux__ 1 
#define __USE_SVID 1 
#define __USE_XOPEN2K 1 
#define __USE_POSIX199506 1 
#define _G_USING_THUNKS 1 
#define __USE_XOPEN2K8 1 
#define _BSD_SOURCE 1 
#define unix 1 
#define linux 1 
#define __USE_POSIX 1 
#define __USE_POSIX199309 1 
#define __SSP__ 1 
#define _SVID_SOURCE 1 
#define _G_HAVE_SYS_CDEFS 1 
#define __USE_POSIX_IMPLICITLY 1 

上記のWindows固有のマクロについては、どこに詳しいドキュメントがありますか。

また、私は一度、クロスプラットフォームのパッケージシステム、pkgsrcので使用するために特定のマクロを集め

+1

あなたがリストしたマクロの中には機能テストマクロがあります(http://www.kernel.org/doc/man-pages/online/pages/man7/feature_test_macros.7.htmlを参照)。これは動作しませんあなたが望む方法。 – ninjalj

答えて

6

glibc manualには、_POSIX_SOURCEを含むこれらのマクロがいくつか記載されています。ただし、プログラマーはこれらのマクロを(ビルドスクリプト内で)おそらく定義し、Cライブラリヘッダーはそれをチェックして特定の機能を有効または無効にします。

2

最近では、WindowsとPOSIXの2つのゲームがあります。したがって、あなたは#ifndef _WIN32であなたが望むものを得ることができるでしょう。生存しているUnixの亜種の区別はautoconfスタイルの機能テスト、 #ifdef HAVE_SYS_WHATEVER_H;あなたがあなたが必要と知っているまでそれらのいずれかで気にしないでください。 autoconfマニュアルの在庫テストの多くは、今日は不要です。

(VMSとIBMがUnix以外のメインフレームOSと呼んでいるものは最近かもしれませんが、でも町ではもっとゲームとしてカウントされますが、誰かがそれを要求するまで、どちらかに移植するのは大変です。 )

関連する問題