我希望这是一个有趣的问题。我正在尝试寻找未解决的外部符号的来源。如果打开了调试,我有使用全局文件指针的调试代码。所有这些调试代码都应该受#ifdef保护,例如:

#ifdef DO_XLL_DEBUG
fprintf(debugPointer, "hello\n);
...
#endif

当我定义DO_XLL_DEBUG时,一切都很好。如果我未定义DO_XLL_DEBUG,则所有内容都会编译(以防万一,我会全部重建),但在链接步骤失败,找不到debugPointer。

因此,问题是,是否有一种简单的方法可以找到在调试代码中#ifdef失败的地方?我可以想到几种不太容易的方法。

我正在使用Visual Studio2005。这是一个C++项目。

谢谢!

[编辑]

感谢所有的建议。原来问题出在别人的代码中,而不是我在Linux中从事的相应项目的一部分(我在其中从事大部分工作),所以难怪我没有立即找到它。

最佳答案

只需定义一些不兼容的debugPointer,然后让编译器将您指向所有意外使用或重新定义它的地方。可能是这样的:

#ifndef DO_XLL_DEBUG
#define debugPointer static_assert(false,"damn it!");
#endif

(假设您没有其他称为debugPointer的变量,参数等)

10-08 07:54