「C」標準__func__
は、関数の引数の名前に似たものをサポートしていますか?
user99081
質問する
5173 次
2 に答える
5
いいえ、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-nameは字句的に囲む関数の名前です。63)
gccは、他のコンパイラーが行うと想像するように、いくつかの拡張機能を追加します。
于 2009-05-25T09:29:08.853 に答える
3
このための迅速で汚い解決策が必要な場合は、このようなプリプロセッサマクロを作成してください...
#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()
これはあなたが望むように正確に機能するはずですが、それは醜いです。
于 2009-05-25T09:38:54.547 に答える