我在写一个简单的宏来显示TRACE信息。令牌粘贴和__LINE__
这是我使用的是什么,
#ifdef __DEBUG__
#define TRACE { PrintErrorMsg("Trace exception at " __FILE__ "LineNo:"##(__LINE__) "Function: " __FUNCTION__ " ");}
#else
#define TRACE
#endif
这正与FILE,但它似乎并不与LINE, 任何想法我怎么能对付这个工作。我已经尝试了穿线操作员。其中有 波纹管。
#ifdef __DEBUG__
#define TRACE { PrintErrorMsg("Trace exception at " __FILE__ "LineNo:"#(__LINE__) "Function: " __FUNCTION__ " ");}
#else
#define TRACE
#endif
,并没有PARMS和双PARMS,前 - __LINE__
或((__LINE__))
任何想法,我怎么能解决这个问题?
我想出这个,
#ifdef __DEBUG__
#define ERROR_MSG_BUF_SIZE 1024
#define TRACE { char * error_msg_buffer = new char[ERROR_MSG_BUF_SIZE]; \
sprintf(error_msg_buffer,"Trace Exception at file: %s ,Line : %d , Function %s \n",__FILE__,__LINE__,__FUNCTION__);\
PrintErrorMsg(error_msg_buffer);\
delete[] error_msg_buffer;}
#else
#define TRACE
但我想这样做,而无需使用sprintf的,仅仅只能通过串并标记粘贴。 有什么想法?
#endif
--Thanks在advance--
为什么你在'__LINE__'周围有括号? –
,因为它不仅属于'_',而且全部属于'__LINE__'。 因为我提到这个:http://stackoverflow.com/questions/9454973/token-pasting-does-not-seem-to-be-working-with-c-macros –
恩,'__LINE__'是令牌。你想'#__ LINE__'。 –