2010-01-19 127 views
4

GCC 4.4.2的C89交叉编译宏名

我有下面的代码。

#if defined (__linux__) 
    log_msg(stderr, "Socket failed [ %s ] [ %s ] [ %d ]\n", 
     strerror(errno), __func__, __LINE__); 

#elif (WIN32) 
    log_msg(stderr, "Socket failed [ %s ] [ %s ] [ %d ]\n", 
     strerror(errno), __FUNCTION__, __LINE__); 
#endif 

因为我在编译Windows和Linux我不得不分开,因为它们使用不同的宏用于获取函数名功能FUNC如上log_msg。

但是,我有很多这些log_msg来写,只是想知道有无论如何,我可以避免为了一个宏不同而写两次吗?

非常感谢您的任何建议,

回答

5

为什么不做这样的事情?

#if defined (__linux__) 
    #define FUNC_REF __func__ 
#elif (WIN32) 
    #define FUNC_REF __FUNCTION__ 
#endif 

log_msg(stderr, "Socket failed [ %s ] [ %s ] [ %d ]\n", 
    strerror(errno), FUNC_REF, __LINE__); 

编辑:你当然可以切忌使用一个新的常数通过定义一个被对方(即#define __func__ __FUNCTION__WIN32条件)

+0

25完全相同的答案糟糕秒。 – 2010-01-19 15:52:06

+0

@克里斯,很好的比赛。 – 2010-01-19 15:53:13

+0

谢谢,如果我在过去的8年中编写了任何C语言,并且不必查找正确的方式来定义某些内容,我可能会赢。 – 2010-01-19 16:20:07