[解決済み] PRETTY_FUNCTION__, __FUNCTION__, __func__の違いは何ですか?
質問
とはどう違うのですか?
__PRETTY_FUNCTION__
,
__FUNCTION__
,
__func__
また、それらはどこで文書化されているのでしょうか?どれを使うかどうやって決めればいいのでしょうか?
どのように解決するのですか?
__func__
は暗黙のうちに宣言される識別子で、関数内で使用されると、関数名を含む文字配列変数に展開されます。 C99でC言語に追加された。 由来
C99
§6.4.2.2/1:
識別子
__func__
はトランスレータによって暗黙のうちに、あたかも各関数定義の開始波括弧のすぐ後に宣言されたstatic const char __func__[] = "function-name";
が現れ、function-nameは語彙的に囲む関数の名前である。 この名前は関数の飾り気のない名前です。
マクロではないので、前処理時に特別な意味を持たないことに注意してください。
__func__
はC++11でC++に追加され、そこで"an implementation-defined string"を含むと指定されました(C++11 §8.4.1[dcl.fct.def.general]/8) これはCでの指定ほど有用ではありません(当初の提案で追加されたのが
__func__
をC++に追加することは
N1642
).
__FUNCTION__
は、一部のCコンパイラ(gccやVisual C++を含む)がサポートする事前標準の拡張機能で、一般に、この拡張機能を使用するには
__func__
を使用し、サポートされている場所でのみ
__FUNCTION__
をサポートしていないコンパイラーを使用している場合(例えば、C99 をサポートしておらず、C++0x のすべてをまだサポートしていない Visual C++ では、C99 をサポートしていないコンパイラーでは
__func__
).
__PRETTY_FUNCTION__
は gcc 拡張で、ほとんど
__FUNCTION__
ただし、C++の関数の場合は、関数のシグネチャを含む関数の名前が含まれます。 Visual C++にも似たような(全く同じではない)拡張機能があります。
__FUNCSIG__
.
非標準のマクロについては、コンパイラのドキュメントを参照するとよいでしょう。 Visual C++の拡張機能は、C++コンパイラのMSDNドキュメントに含まれています。 "定義済みマクロ" . gcc ドキュメント拡張は、gcc ドキュメント ページで説明されています。 "文字列としての関数名."
関連
-
[解決済み】識別子 "string "は未定義?
-
[解決済み】C++エラー:の初期化に一致するコンストラクタがありません。
-
[解決済み】CMakeエラー at CMakeLists.txt:30 (project)。CMAKE_C_COMPILER が見つかりませんでした。
-
[解決済み] 数値定数の前にunqualified-idを付けて、数値を定義することを期待する。
-
[解決済み] 警告:暗黙の定数変換でのオーバーフロー
-
[解決済み] static_cast, dynamic_cast, const_cast, reinterpret_cast はいつ使うべきですか?
-
[解決済み] const int*、const int * const、int const *の違いは何ですか?
-
[解決済み] ++iとi++の違いは何ですか?
-
[解決済み] g++とgccの違いは何ですか?
-
[解決済み] constexpr` と `const` の相違点
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】LLVMで暗黙のうちに削除されたコピーコンストラクタの呼び出し
-
[解決済み】C++エラーです。"配列は中括弧で囲まれたイニシャライザーで初期化する必要がある"
-
[解決済み】文字列関数で'char const*'のインスタンスを投げた後に呼び出されるterminate [閉店].
-
[解決済み】関数名の前に期待されるイニシャライザー
-
[解決済み】リンカーエラーです。"リンカ入力ファイルはリンクが行われていないため未使用"、そのファイル内の関数への未定義参照
-
[解決済み】システムが指定されたファイルを見つけられませんでした。
-
[解決済み】クラスのコンストラクタへの未定義参照、.cppファイルの修正も含む
-
[解決済み] gdbを使用してもデバッグシンボルが見つからない
-
[解決済み] C++ における __FILE__, __LINE__, __FUNCTION__ の使用法
-
[解決済み] CまたはC++でコールスタックを印刷する