サポートされるGCC属性
拡張言語モードでは、IAR C/C++コンパイラは、限られたGCCスタイル属性もサポートします。 __attribute__ ((attribute-list)) 構文をこれらの属性に使用します。
次の属性は、一部またはすべてがサポートされます。詳細については、GCCのドキュメントを参照してください。
aliasalignedこの属性は以下でサポートされています。
typedef宣言enumタイプstructおよびunionタイプおよびメンバレジスタ変数を除く変数。
GCC 実装とは異なり、属性は関数でも(ポインタ)関数パラメータでもサポートされません。また、自動変数がスタックよりも厳密なアライメントを持つことができないなど、追加の制限が適用される場合があります。
always_inlineGCCの実装とは対照的に、この属性は関数の
inlineを暗黙的に示し、非インライン関数でalways_inlineが使用される場合には診断メッセージは生成されません。cleanupcmse_nonsecure_call__cmse_nonsecure_callも参照してください。
cmse_nonsecure_entry__cmse_nonsecure_entryも参照してください。
coldこの属性は、関数の最適化目標をサイズの最適化に設定します。
#pragma optimizeを使用して最適化目標も設定されている場合、 GCC スタイル属性はこれを上書きします。競合が発生すると、警告が表示されます。GCC の実装とは異なり、属性はラベルではなく関数属性としてのみ使用できます。
constconstructor属性が
constructorの関数は、動的初期化の最後(静的初期化の後)、mainが呼び出される前に呼び出されます。属性が複数の関数で使用される場合、定義された順番で呼び出されます。この属性は、オプション
‑‑sharedを使用してコンパイルされたオブジェクトで使用された場合、認識されますが、効果はありません。deprecatedfallthroughThe attribute is recognized but has no effect, because the compiler does not diagnose fallthrough between case labels. However, when used, correct usage of the attribute will be enforced.
formathotこの属性は、関数の最適化目標を速度の最適化に設定します。
#pragma optimizeを使用して最適化目標も設定されている場合、 GCC スタイル属性はこれを上書きします。競合が発生すると、警告が表示されます。GCC の実装とは異なり、属性はラベルではなく関数属性としてのみ使用できます。
nakednoinitGCC 実装とは異なり、属性は変数にのみ適用され、そのような変数は IAR
__no_initキーワードで宣言されたかのように扱われます。noinlinenonnull属性は認識されますが、効果はありません。
noreturnpackedenum定義で使用する場合、
packed属性はオプション‑‑enum_is_intが指定されている場合にのみ機能します。その場合、enumには可能な限り一番小さい基礎型が選択されます。(それ以外の場合は、これがコンパイラのデフォルトの動作です)。GCCスタイルの属性
packedを使用する場合、潜在的なアライメントされていないstructメンバー アクセスに対して診断メッセージは生成されないので、注意してください。このようなアクセスを通知するには、IARタイプの属性__packedを使用します。pcs(関数に使用されるIAR 型属性用)puresectiontarget(関数に使用されるIAR 型属性用)unusedusedvisibilityリファレンス情報については、visibilityを参照してください。
volatilewarn_unused_resultweakIAR属性
__weakが宣言、または以降の定義での仮の定義で使用される場合、オブジェクトは弱くならないことに注意してください。GCCスタイル属性weakを使用すると、オブジェクトはweakになります。
visibility
構文
__attribute__((visibility ("type"))
パラメータ
| これらの値のうちの1つ:
|
説明
この属性はCモードでサポートされています。これを使用するコードは、オプション--sharedでコンパイルする必要があります。それ以外では、属性は認識されますが、効果はありません。関数や変数とともに使用できます。
次の制限が適用されます。
visibility属性は、型には使用できません。使用しようとすると、診断メッセージが出力されます。対応する定義または仮の定義のないオブジェクトの
extern宣言で使用しても、この属性の効果はありません。visibilityタイプinternalは、リンカによってhiddenとして扱われます。
例
void
__attribute__((visibility ("hidden")))
myFunction() { }関連項目
‑‑so_export および ‑‑visibility。