包含新 ID 是否需要重新编译?

Will including new IDs require recompile?

globals.h

#define Id1 1
#define Id2 2

factory.h

Item* makeItem(int id);

在 globals.h 中包含新 ID 是否需要重新编译使用旧 ID 的 makeItem 的文件?

还有如何知道哪些更改需要重新编译或重新链接依赖项?

对 globals.h 的任何更改都需要重新编译 #include globals.h 的文件或包含包含 globals.h 的头文件。因此,如果您的 ID 列表经常更改,并且有很多文件依赖于它,并且您的项目很大,那么这可能会很麻烦。

一种解决方法是将 globals.h 拆分为不同的 h-files,这样每个 h-file 仅供项目中相对较小的一部分使用。然后,其中之一的更改将不需要太多的重新编译。

如果这样做,您通常会面临保持所有 ID 唯一的挑战。如果它们在不同的头文件中定义,那么在一个文件中进行更改的开发人员可能不知道她正在导致与另一个文件中定义的 ID 发生冲突。一个解决方案是遵循一个有据可查的约定,其中定义 ID 的每个 h-file 都有一个关联的 ID 范围,并且范围不重叠。

你可以把所有的ID放在一个char数组中,然后在globals.h中定义char指针char * Id_array,如果你有新的ID,只需将它推入ID数组并使Id_array指向你构造的ID数组。