هل لديك وظيفة __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";

ظهرت، حيث وظيفة الوظيفة هي اسم الوظيفة المرفقة من طراز متعمدة .63)

GCC يضيف بعض امتدادات, ، كما أتصور التحويل البرمجيات الأخرى القيام به.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top