如何使智能感知将当前源文件视为独立的翻译单元
How to make intellisense treat the current source file as a standalone translation unit
在重构我们的项目源以供将来在其他项目中使用时,我们遇到了一个问题:越来越难以确定什么真正依赖于什么,因为 Intellisense 神奇地修复了幕后的一切。
示例问题:
"c.c"
源文件 #includes "a.h"
然后 "b.h"
所以 "b.h"
应该可以使用所有 "a.h"
而没有任何 #include
因为它是 "c.c"
翻译单元的一部分
在编辑 "b.h"
Intellisense "correctly" 时显示来自 "a.h"
的所有定义,这太棒了
但是我们需要一种方法来表明 "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>
由于它不会生成任何目标代码,因此不会影响生成的可执行文件的大小。
在重构我们的项目源以供将来在其他项目中使用时,我们遇到了一个问题:越来越难以确定什么真正依赖于什么,因为 Intellisense 神奇地修复了幕后的一切。
示例问题:
"c.c"
源文件 #includes"a.h"
然后"b.h"
所以
"b.h"
应该可以使用所有"a.h"
而没有任何#include
因为它是"c.c"
翻译单元的一部分在编辑
"b.h"
Intellisense "correctly" 时显示来自"a.h"
的所有定义,这太棒了
但是我们需要一种方法来表明 "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>
由于它不会生成任何目标代码,因此不会影响生成的可执行文件的大小。