ホームページ >バックエンド開発 >C++ >`__PRETTY_FUNCTION__`、`__FUNCTION__`、および `__func__` の違いは何ですか?

`__PRETTY_FUNCTION__`、`__FUNCTION__`、および `__func__` の違いは何ですか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-12-23 21:51:10317ブラウズ

What are the Differences Between `__PRETTY_FUNCTION__`, `__FUNCTION__`, and `__func__`?

PRETTY_FUNCTION__、__FUNCTION__、__func の違いをナビゲートする

コーディングの領域では、次のことを理解することが重要です3 つの識別子の区別: __PRETTY_FUNCTION__、__FUNCTION__、および __func__。それぞれが独自の属性とドキュメントを保持しており、目的の結果に応じて選択に影響します。

func

C99 で導入された func は、関数のスコープ内で現在の関数の名前にアクセスするための簡単なソリューションを提供します。これは、装飾されていない関数名を含む文字配列に展開されます。この識別子は C でも注目を集めており、C 11 では「実装定義の文字列」という少し異なる定義で追加されました。

Exploring FUNCTION

特定の C コンパイラは、FUNCTION をサポートします。標準以前の拡張機能ですが、これだけに依存することはお勧めできません。 func サポートがないコンパイラーの場合、標準化された対応物と比較して制限はありますが、FUNCTION が代わりとして機能します。

Enter PRETTY_FUNCTION

__PRETTY_FUNCTION__ は、gcc 固有の拡張機能であり、__FUNCTION__ と同様に動作します。ただし、C 関数のコンテキストでは、関数シグネチャを備えた関数名の拡張バージョンが表示されます。 Visual C は、__FUNCSIG__ で同等の代替手段を提供しますが、微妙な違いがあります。

ドキュメントと可用性

非標準マクロについては、それぞれのコンパイラのドキュメントを参照することが賢明です。 。 Visual C 拡張機能については、MSDN の C コンパイラの「定義済みマクロ」で詳しく説明されていますが、gcc 拡張機能についてはドキュメント ページ「文字列としての関数名」で説明されています。

正しい識別子の選択

適切な識別子の選択は、目的の結果とコンパイラによって異なります。 support.

  • __func__: C99 以降の装飾されていない関数名への標準化されたアクセスにこれを使用します。
  • __FUNCTION__: の使用を検討してください。これは func が利用できない場合ですが、その点に注意してください。制限事項。
  • __PRETTY_FUNCTION__: C コード、特に gcc で署名付きの「きれいな」関数名が必要な場合は、これを選択してください。

理解することでこれらの識別子のニュアンスを理解すると、その力を効果的に利用して、コーディングに必要な関数関連の情報を取得できます。努力します。

以上が`__PRETTY_FUNCTION__`、`__FUNCTION__`、および `__func__` の違いは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。