我正在尝试构建一个调试日志消息函数,该函数记录日志消息从何处被调用的文件,行和函数。函数名称的预定义宏__func__
#define DEBUG_PANIC(p) CLogging::Debuglogf("Debug marker (%s) - ::%s() in file: %s(%d)", p, __func__ , __FILE__, __LINE__);
上面的代码适用于一些编译器,但不是全部。我的代码需要与GCC以及Microsoft Visual Studio交叉兼容。我已经添加了下面的定义来帮助兼容性。
#ifndef __FUNCTION_NAME__
#if defined __func__
// Undeclared
#define __FUNCTION_NAME__ __func__
#elif defined __FUNCTION__
// Undeclared
#define __FUNCTION_NAME__ __FUNCTION__
#elif defined __PRETTY_FUNCTION__
// Undeclared
#define __FUNCTION_NAME__ __PRETTY_FUNCTION__
#else
// Declared
#define __FUNCTION_NAME__ "N/A"
#endif // __func__
#endif // __FUNCTION_NAME__
#define DEBUG_PANIC(p) CLogging::Debuglogf("Debug marker (%s) - ::%s() in file: %s(%d)", p, __FUNCTION_NAME__, __FILE__, __LINE__);
与上面代码段的问题是,它是的#else宏是在所有的编译器活性,而其他的宏都没有。换句话说#if defined __func__
在编译器上是错误的,其中__func__
是预定义的宏。
我的问题是
- 如何创建一个交叉编译器宏找到函数的名字吗?
- 如何判断是否可以使用
__func__
?
你在写C或C++吗? – 2013-03-09 00:01:41
@KeithThompson对不起,我忘了,这增加的问题,是C++ – 2013-03-09 00:28:03