如何在C宏中找到编译器错误?

时间:2015-03-24 13:17:43

标签: c macros

我们有一个代码库,它依赖于C宏生成的大量生成代码。

如果出现问题并且出现错误或警告,编译器会指向第一个宏扩展的行,而不会更多地了解扩展代码中的错误位置。我的特殊情况是Visual Studio中的那些/analyze警告。

是否有任何技巧和提示可帮助您在复杂的预处理器宏中找到问题?

编辑:

如果你想知道为什么这个代码库有复杂的宏。

这是一个模拟器项目,其中解码阶段和执行阶段是分开的。例如,我们不是在每条指令的执行过程中发现使用了什么寻址模式或操作数大小等,而是使用DEFINE_INSTRUCTION宏为每个组合生成一个函数,该函数又为所有组合生成函数。并链接这些功能。

1 个答案:

答案 0 :(得分:1)

  1. idea:dont;)不要使用复杂的宏,因为你失去了很多IDE支持/编译器支持
  2. =>如果你有这样的宏,将它们重构为函数......甚至可能是内联函数

    但是认真。帮助你处理你所困扰的糟糕的宏:正如TripeHound所说,有标志可以编译' C文件只到预处理C文件的阶段 -

    在命令行中,clang -E foo.m将显示预处理的输出。