هل لديك وظيفة __FUNC__ لأسماء حجج الوظيفة؟
سؤال
هل دعم "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";
ظهرت، حيث وظيفة الوظيفة هي اسم الوظيفة المرفقة من طراز متعمدة .63)
GCC يضيف بعض امتدادات, ، كما أتصور التحويل البرمجيات الأخرى القيام به.
لا تنتمي إلى StackOverflow