[解決済み】CプリプロセッサでMac OS X、iOS、Linux、Windowsを確実に検出する方法とは?重複
2022-03-26 17:29:03
質問
Mac OS X、iOS、Linux、Windows でコンパイルされるべきクロスプラットフォームな C/C++ コードがある場合、プリプロセッサの処理中にそれらを確実に検出するにはどうすればよいでしょうか。
どのように解決するのですか?
ほとんどのコンパイラで使用される定義済みマクロがあります。 ここで . GCC コンパイラの定義済みマクロは次のとおりです。 こちら . 以下はgccの例です。
#if defined(WIN32) || defined(_WIN32) || defined(__WIN32__) || defined(__NT__)
//define something for Windows (32-bit and 64-bit, this part is common)
#ifdef _WIN64
//define something for Windows (64-bit only)
#else
//define something for Windows (32-bit only)
#endif
#elif __APPLE__
#include <TargetConditionals.h>
#if TARGET_IPHONE_SIMULATOR
// iOS, tvOS, or watchOS Simulator
#elif TARGET_OS_MACCATALYST
// Mac's Catalyst (ports iOS API into Mac, like UIKit).
#elif TARGET_OS_IPHONE
// iOS, tvOS, or watchOS device
#elif TARGET_OS_MAC
// Other kinds of Apple platforms
#else
# error "Unknown Apple platform"
#endif
#elif __linux__
// linux
#elif __unix__ // all unices not caught above
// Unix
#elif defined(_POSIX_VERSION)
// POSIX
#else
# error "Unknown compiler"
#endif
定義されているマクロは、使用するコンパイラに依存します。
は
_WIN64
#ifdef
の中に入れ子にすることができます。
_WIN32
#ifdef
というのも
_WIN32
は、Windows x64版をターゲットとする場合にも定義されます。これにより、いくつかのヘッダーインクルードが両者で共通である場合、コードの重複を防ぐことができます。
(また
WIN32
アンダースコアなしで、IDEがコードの正しい部分を強調できるようにします)。
関連
-
[解決済み】Visual Studio 2015で「非標準の構文; '&'を使用してメンバーへのポインターを作成します」エラー
-
[解決済み] SQLiteのINSERT/per-secondのパフォーマンスを向上させる
-
[解決済み] C++11では、標準化されたメモリモデルが導入されました。その意味するところは?そして、C++プログラミングにどのような影響を与えるのでしょうか?
-
[解決済み] Linux上で動作するC++コードのプロファイリングを行うにはどうすればよいですか?
-
[解決済み] Cプリプロセッサはなぜ "linux "という単語を定数 "1 "と解釈するのですか?
-
[解決済み] BashスクリプトからOSを検出する方法は?
-
[解決済み】高放射能環境下で使用するアプリケーションのコンパイルについて
-
[解決済み】LinuxのネイティブGUI APIは何ですか?
-
[解決済み】Javaでユーザーのホームディレクトリを見つけるための最良の方法は何ですか?
-
[解決済み】Cygwin、Mac、Linuxで動作しているかどうかを確認する方法は?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】C++ 非推奨の文字列定数から「char*」への変換について
-
[解決済み】C++エラーです。"配列は中括弧で囲まれたイニシャライザーで初期化する必要がある"
-
[解決済み】fpermissiveフラグは何をするのですか?
-
[解決済み】「Expected '(' for function-style cast or type construction」エラーの意味とは?
-
[解決済み】指定範囲内の乱数で配列を埋める(C++)
-
[解決済み】std::cin.getline( ) vs. std::cin
-
[解決済み】Visual Studioのデバッガーエラー。プログラムを開始できません 指定されたファイルが見つかりません
-
[解決済み】演算子のオーバーロード C++; <<操作のパラメータが多すぎる
-
[解決済み】プリプロセッサディレクティブでOSをチェックする方法とは?
-
[解決済み】WindowsとLinuxでC++コンパイル:ifdefスイッチ【重複あり