是否有一个工具可以检查C文件取决于哪些预定义宏



为了避免不可能的情况,人们可以将问题减少到两种情况下。

情况1

第一种情况(最简单)的情况是预处理器有机会检测它,即有一个预处理器指令取决于预定义的宏(在第一条输入之前定义)。例如:

#ifdef FOO
#define BAR 42
#else
#define BAR 43
#endif

取决于FOO是否是预定义的。但是文件

#undef FOO
#ifdef FOO
#define BAR 42
#endif

没有。一个困难的情况是检测依赖性是否确实很重要,而在上述情况下却不重要(因为FOOBAR都不会影响输出)。


情况2

第二个(更难)的情况是成功编译取决于预定义的宏:

INLINE int fubar(void) {
    return 42;
}

就预处理器而言,这是完全很好的,ENTRY_POINT是否是预定义的,但是除非仔细定义INLINE,否则代码不会编译。类似地,在这种情况下,我们可以排除不影响输出的情况,但我找不到一个例子。这里的并发症是在示例中:

int fubar(void) {
    return 42;
}

预定义的fubar可以更改其成功的汇编,因此可能需要将其限制为需要预定义才能成功编译的情况。


我想这样的工具将类似于预处理器(第二种情况下的C解析器)。问题是是否有这样的工具?还是只能处理第一种情况的工具?还是根本没有?

在c中的所有内容都可以(重新)定义,因此无法事先知道要定义的内容。通常,某些命名约定可以帮助我们弄清楚是宏观的含义(例如上案例)。因此,不可能拥有这种工具。当然,如果您假设汇编错误是由于缺少宏定义引起的,那么您可以使用它们来分析缺少的内容。

最新更新