我有一组松散相关的头文件库,我想使它们一起工作而不会紧密耦合。我想到的一种方法是尝试包含其他头文件,如果找到了它们,则可以相应地生成代码。所以也许我在vector.hh中会有一个 vector 类:

#ifndef __VECTOR_HH__
#define __VECTOR_HH__

bunch of vector-y stuff

#endif

然后在另一个文件中的axis.hh(假设它进行坐标转换):
#ifndef __COORDINATES_HH__
#define __COORDINATES_HH__
#include <vector.hh>

class SomeCoordinateType {
#ifdef __VECTOR_HH__
    operator vector() { <convert to vector> }
#endif
}

#endif

用户的想法是获取所需的任何头文件。如果他们捕获了vector.hh header 和坐标.hh,那么我将为他们创建转换运算符,如果不是的话。这一切都取决于能否使#include指令在失败时不会产生致命错误。有什么办法吗?

最佳答案

根据C标准,编译器必须对丢失的 header 进行诊断。

完成此操作后,它可以继续编译并生成可以并且想要这样做的目标文件。另一方面,大多数情况下,缺少 header 会导致其他错误的主要列表(因为 header 对于编译至关重要),因此不会生成目标文件。

由于缺少头文件,编译器有权不生成目标文件,因此您不能随便承担除失败以外的任何事情。失败是迄今为止最常见的结果。

(IIRC,一次-大概十年或更早以前-Sun C编译器从#error生成了一条消息,但继续进行编译,有时成功,具体取决于#error所保护的内容。此问题已得到修复。不完全相同,但是有点相关。)

09-04 14:41
查看更多