Cは、関数の引数の名前のための__func__の機能を持っていますか?

StackOverflow https://stackoverflow.com/questions/905999

  •  05-09-2019
  •  | 
  •  

質問

「C」関数の引数の名前のために__func__に似た標準サポートに何かをしていますか?

役に立ちましたか?

解決

あなたは、このための迅速かつ汚いソリューションは、このようなプリプロセッサマクロを作りたい場合は...

#define FUNCTION_HEADER(a) a { const char* __func__ = #a;
#define FUNCTION_FOOTER() }

...と(VS 2008でテスト済み)このようなあなたの関数のヘッダーとフッターのためにそれを使用します:

#include <windows.h>

#define FUNCTION_HEADER(a) a { const char* __func__ = #a;
#define FUNCTION_FOOTER() }

FUNCTION_HEADER( int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd) )
    MessageBoxA(0, __func__, __func__, MB_OK);
    return 0;
FUNCTION_FOOTER()

これは、あなたがしたい正確にどのように動作するはずですが、それは醜いです。

他のヒント

いいえ、C99標準では、次のいます:

  

6.10.8事前定義されたマクロ名

     

次のマクロ名実装によって定義されなければならない。

__DATE__ 
__FILE__ 
__LINE__ 
__STDC__ 
__STDC_HOSTED__ 
__STDC_MB_MIGHT_NEQ_WC__ 
__STDC_VERSION__ 
__TIME__ 
  

次のマクロ名は、条件付きで実装によって定義される:

__STDC_IEC_559__ 
__STDC_IEC_559_COMPLEX__ 
__STDC_ISO_10646__ 
  

6.4.2.2定義済みの識別子

     

識別子__func__が暗黙的に翻訳者によって宣言されなければならないかのように、     直ちに各関数定義の開口ブレース以下、宣言

     static const char __func__[] = "function-name";

)関数名が辞書的に包囲function.63の名前であり、登場

gccが/ <いくつかの拡張機能を追加しA>、私は他のコンパイラが行う想像してます。

scroll top