如何使智能感知将当前源文件视为独立的翻译单元

How to make intellisense treat the current source file as a standalone translation unit

在重构我们的项目源以供将来在其他项目中使用时,我们遇到了一个问题:越来越难以确定什么真正依赖于什么,因为 Intellisense 神奇地修复了幕后的一切。

示例问题:

但是我们需要一种方法来表明 "b.h" 顶部缺少一个 #include "a.h" 以供将来重用...有什么方法可以让 Intellisense 处理 "b.h"作为一个独立的翻译单元?

编辑:为了澄清起见,将主要来源的名称更改为 "c.c",即使我们的代码中确实包含循环包含,这也不是我们需要解决的实际问题

我不确定这里有一个单独的翻译单元...#include 非常不神奇(它只是连接文件),单独的翻译单元只是编译成单独的 object 文件("b.h" 本身不太可能是一个明智的程序,因为同理,headers 不包含在 object 代码中分配存储空间的任何内容)。

我想你要找的是一个包含守卫;尝试将所有 "b.h" 包装成如下所示:

#ifndef HAVE_B_H
# define HAVE_B_H

/* contents of "b.h" here */

#endif /* HAVE_B_H */

这允许您直接从 "a.h"(以及 "a.c")的顶部包含它,确保它在任何地方都可见,而不是多次包含。 实际上,这通常是一个很好的做法。

为了测试,您可以制作一个名为 test_b_h.c 的单独翻译单元,它只有

#include <b.h>

由于它不会生成任何目标代码,因此不会影响生成的可执行文件的大小。