10

"#pragma section <XYZ>"Cでの使用は何ですか?

次の種類が使用されている C コード ファイルに出くわしました:-

#define XYZ "ITEM 26.G03"

#pragma section <XYZ>

ここで、XYZ は次のとおりです。 #define XYZ "ITEM 26.G03"

の使用について説明が必要です"#pragma section"

4

2 に答える 2

8

#pragmaディレクティブは実装固有のディレクティブであり、コンパイラに追加情報を提供する標準的な方法です。このディレクティブの形式は次のとおりです。

#pragma name

プリプロセッサが指定された「名前」を認識した場合、それが表すアクションを実行するか、情報をコンパイラに渡します。「name」が c 実装でサポートされていない場合、それは無視されます。

たとえば、gcc コンパイラは、ここにリストされているプラ​​グマのリストを受け入れます

の場合、gcc#pragma sectionのドキュメントには次のように記載されています。

section ("セクション名") 通常、コンパイラは、生成したコードをテキスト セクションに配置します。ただし、追加のセクションが必要な場合や、特定の機能を特別なセクションに表示する必要がある場合があります。section 属性は、関数が特定のセクションに存在することを指定します。たとえば、宣言は次のとおりです。

      extern void foobar (void) __attribute__ ((section ("bar")));

関数foobarをバーセクションに配置します。

一部のファイル形式は任意のセクションをサポートしていないため、セクション属性はすべてのプラットフォームで使用できるわけではありません。モジュールの内容全体を特定のセクションにマップする必要がある場合は、代わりにリンカーの機能を使用することを検討してください。

詳細はこちら

于 2012-08-16T06:48:30.620 に答える
5

Section は、.obj ファイルにセクションを作成します。
詳細については、 MSDNを参照してください。

コードとデータは、オブジェクト ファイル内のセクションで生成され、リンカーによって実行可能ファイルに結合され、最終的にターゲット メモリの特定の場所に配置されます。デフォルトのセクションは事前定義されており、特定の属性があります。セクション プラグマを使用して、デフォルトの属性を変更したり、新しいセクションを定義したり、特定のセクションへのコードや変数の割り当てを制御したり、リンカー コマンド ファイルと一緒にそれらの場所を制御したりできます。

#pragma sectionセクション クラスを定義し、オプションでクラス内の 1 つまたは 2 つのセクションを定義します。セクション クラスは、クラスのインスタンスに配置された変数とコードのアドレス指定とアクセス可能性を制御します。

于 2012-08-16T06:14:56.890 に答える