Вставка токена и __LINE__

Я пишу простой макрос, чтобы показать информацию TRACE.

Это то, что ям использую,

#ifdef __DEBUG__
#define TRACE  { PrintErrorMsg("Trace exception at " __FILE__  "LineNo:"##(__LINE__) "Function: " __FUNCTION__ " " );}
#else 
#define TRACE 
#endif

Это работает сФАЙЛ, но это не таккажется, работает сЛИНИЯ Любая идея, как я мог справиться с этим. Я уже пробовал оператор струн тоже. Что ниже.

#ifdef __DEBUG__
#define TRACE  { PrintErrorMsg("Trace exception at " __FILE__  "LineNo:"#(__LINE__) "Function: " __FUNCTION__ " " );}
#else 
#define TRACE 
#endif

и без пармса и с двойным пармсом, экс -__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

--Заранее спасибо--

Ответы на вопрос(2)

Ваш ответ на вопрос