1

VisualDSP++ v. 5.0 を使用して Blackfin プロセッサのコードを変更しています。このプロジェクトのすべてのヘッダー ファイルが次の規則を使用していることに気付きました。

#ifdef _LANGUAGE_C

/* All of the code associated with this header file. */

#endif

このコンパイラのドキュメントを検索したところ、次のことがわかりました。

_LANGUAGE_C - 常に 1 として定義されます。

だから私の質問は2つあります。

  1. を使用する目的は何#ifdef _LANGUAGE_Cですか?
  2. これは、マクロが定義されていない可能性のある別のコンパイラでコードが実行されないようにするだけではありません_LANGUAGE_Cか?
4

3 に答える 3

3

コンテキストでどのように使用されるかを確認する必要がありますが、この場合、CコードとアセンブラーコードがCプリプロセッサーを使用するアセンブラーの両方で使用されるヘッダーで使用されていると思います。これにより、Cヘッダーをアセンブラーコードに含めることができ、プリプロセッサーにCコード固有の要素を削除させることができます。

たとえば、アセンブラコードでは、#define ...重複や不整合を避けるためにCコードと同じ定数マクロ値を持つと便利ですが、structたとえば定義や関数プロトタイプは無意味です。

私はおそらく:を期待し#if defined(_LANGUAGE_C) || defined(_LANGUAGE_C_PLUS_PLUS)ますが、ドキュメントに常に定義されていると記載されている場合は、おそらくCとC++の両方のコンパイルで定義されています。

于 2012-06-17T09:19:50.677 に答える
1

これはコンパイル定数と呼ばれ、そのようなコンパイル定数はビルド環境に追加する必要があります。ビルド環境を確認する必要があります。コンパイルするコードが C 固有のチェックでコンパイルされ、それに応じて出力ファイル (hex または bin) が生成されることをコンパイラに伝えることです。

于 2012-06-14T05:35:24.453 に答える
1

複合的な質問に答えるには、ほとんどの場合、答えはイエスです。これは、同じコードを使用してさまざまな環境用にビルドできるようにするいくつかのプリプロセッサ ディレクティブの一部です。たとえば、Windows ドライバー キットに目を通すと、ターゲット環境とコンパイラーに応じて最も効率的なコードがビルドされるようにするために、この規則が至る所で使用されていることがわかります。これがお役に立てば幸いです。#ifdef の後に _LANGUAGE_CPP の別のコードを追加し、そこに C++ 固有のコードを配置するなどの可能性があります。

于 2012-06-13T23:51:07.403 に答える