13.1不适宜携带的种类

Autoconf测试和普通程序通常需要测试允许的内容因此,他们可能需要故意超过标准允许的边界,如果只是为了看看存在可选功能。当你编写这样的程序时,你应该记住约束、未指定行为、,以及未定义的行为。

在C中,a约束是编译器必须强制执行的规则。示例约束条件是C程序不能用负宽度。因此,测试可以可靠地假设程序符合以下条件的编译器会拒绝负宽度的位字段符合标准。

未指定的行为是有效的行为,在标准允许的情况下多种可能性。例如未指定函数参数。一些未指定的行为是实现定义的即,通过实施进行记录,但由于Autoconf测试无法读取文档,因此无法读取区分实现定义的和其他未指定的行为。Autoconf测试通常会探测实现确定其他未指定的行为。

未定义的行为是无效行为,标准允许实现来做任何它喜欢的事情。例如,取消引用空指针会导致未定义的行为。如果可能,测试程序应该避免未定义的行为,因为在应该失败的测试中,未定义的行为可能会成功。

上述规则适用于旨在符合标准。然而,严格一致的程序非常罕见,因为这些标准非常有限。Autoconf的一个主要目标是支持使用标准未描述的实现功能的程序,如果测试程序违反上述规则这些程序在实践中运行良好。