web-dev-qa-db-ja.com

この#ifdef__GNUC__についてはどうですか?

これらの行は libmagic code で見つかりました。それらはどういう意味ですか?

_#ifdef __GNUC__
__attribute__((unused))
#endif 
_

___GNUC___はどういう意味ですか?
チェックしているようです GCCがインストールされているかどうか

__attribute__((unused))とは何ですか?
ここにコードスニペットがありますが、説明はありません: 未使用の変数に関する警告を消音するにはどうすればよいですか?

___GNUC___と__MSC_VER_の違いは何ですか?
__MSC_VER_についていくつかの説明がありますが、それはどういうことですか?
特定のVisual Studioバージョンでコードをコンパイルしているかどうかを検出する方法は?

最後に質問:
同じ_#ifdef_を実行して、どのコンパイラがコードをコンパイルしているかを確認するにはどうすればよいですか?

13
alvas

コンパイラーでは、マクロを定義して、それらがどのコンパイラーであるか、どのバージョンであるかを判別するのが一般的です...ポータブルC++コードは、マクロを使用して、特定の機能を使用できるかどうかを確認できます。

___GNUC___はどういう意味ですか?

これは、私がGNUコンパイラであり、GNU拡張機能を使用できることを示しています。 [1]

__attribute__((unused))とは何ですか?

変数に付加されたこの属性は、変数がおそらく未使用であることを意味します。 GCCは、この変数に対して未使用の変数警告を生成しません。 [2]

___GNUC___と__MSC_VER_の違いは何ですか?

それらは2つの無関係なマクロです。 1つ目は私がGNUコンパイラーであり、2つ目はMSコンパイラーのバージョン番号です。ただし、MSコンパイラーはGNU拡張機能をサポートすることを想定していません) 。

同じ_#ifdef_を実行して、OSがpythonおよびMSビジュアルスタジオを使用してGNUコードをコンパイルしているかどうかを確認するにはどうすればよいですか?

_#if (defined(__GNU__) && defined(_MSC_VER))
   // ...
#endif
_
14
masoud

コンパイラが異なれば、サポートする機能も異なります。コードを構築しているコンパイラに応じてサポートを有効にする一連の_#ifdef_ブロックを見つけています。たとえば、GNUコンパイラは自動的に___GNUC___を定義します。___CC_ARM_、___ICCARM___、___GNUC___、___TASKING___はすべてによって定義されますプロジェクトが移植され、関心を持っている特定のコンパイラ。

__attribute__((unused))エントリはGNU固有のインジケータであり(他のコンパイラもこれをサポートしている可能性があります)、アタッチされているシンボルが未使用である可能性があるため、コンパイラはその状態について警告する必要があります。

これらのifdefを使用して、コードをビルドしているコンパイラを判別する方法については、Cをビルドするために別のプロジェクトで読んでいるのと同じ方法で行ってください。これらはpython =コード。

2
mah