【发布时间】:2010-11-12 11:54:01
【问题描述】:
...../PluginLoader.h:34: multiple definition of 'Dummy_Func_For_Generating_FUNCTION_NAME_Macro()'
以下代码输出上述错误。我的档案中包含警卫。其他一切都编译得很好。
编辑:我试图实现的是检查是否定义了__PRETTY_FUNCTION__,如果是,则稍后通过FUNCTION_NAME 宏在代码中使用它(用于记录目的)。如果未定义__PRETTY_FUNCTION__,则使用次优,依此类推。然而,我得到的回应让我意识到这是不可能的。那么,如果__PRETTY_FUNCTION__ 和其他所有这些都不是宏,它们是什么?以及如何检查某个实现是否具有其中之一?
void Dummy_Func_For_Generating_FUNCTION_NAME_Macro()
{
#ifndef FUNCTION_NAME
#ifdef __PRETTY_FUNCTION__
#define FUNCTION_NAME __PRETTY_FUNCTION__
#elif __FUNCTION__
#define FUNCTION_NAME __FUNCTION__
#elif __func__
#define FUNCTION_NAME __func__
#else
#define FUNCTION_NAME ""
#endif
#endif
}
【问题讨论】:
-
__PRETTY_FUNCTION__、__FUNCTION__和__func__的值是多少? -
@Adrien:这些是预定义的宏,但并非所有编译器都实现了所有宏。
-
你把这个函数放在标题里了吗?如果头被多次包含,编译器可能会抱怨它多次找到相同的函数。
-
Ask about the goal, not the step. 如果他们不了解您要做什么,那么没有人可以帮助您。所以“这里出了什么问题”是“谁知道?你告诉我们。”据我所知,您的目标是生成编译错误;这里没有错。
-
@GMan:我不想产生编译器错误。我只是想正确定义
FUNCTION_NAME。我已经在标题中明确提出了我的问题。
标签: c++ macros c-preprocessor