<assert.h> – 诊断(Diagnostics)<complex.h> – 复数运算(Complex Arithmetic)
章节大纲
-
<assert.h>
– 诊断(Diagnostics)C11 增加了对**静态断言(static assertions)**的支持,其中包括向该头文件添加宏
static_assert
。C++ 注意事项:对应的标准 C++ 头文件是
<cassert>
。
程序诊断(Program Diagnostics)
assert
宏标准 C 要求
assert
必须是一个宏,而不是实际的函数。
如果你使用#undef
取消其宏定义后,试图访问一个名为assert
的实际函数,其行为是未定义的。assert
宏输出的消息格式是实现定义的。但标准 C 的意图是:输出的信息应包括断言表达式的文本形式(即源码中的原样表达式),以及发生断言失败的位置的文件名和行号(分别由__FILE__
和__LINE__
表示)。例如,如果你写的是:
assert(MAX - MIN);
其中
MAX
定义为 100,MIN
定义为 20,那么断言失败时的输出应为:MAX - MIN
而不是其计算结果
80
。C89 规定
assert
的参数必须是int
类型,而 C99 将其拓展为任意标量类型。由于
assert
是宏而非函数,使用时要小心避免表达式带有副作用。不要依赖宏只计算一次表达式。
<complex.h>
– 复数运算(Complex Arithmetic)C99 引入了
<complex.h>
头文件,并将对复数类型及其运算的支持设为可选。如果未定义宏
__STDC_NO_COMPLEX__
,则表示实现支持复数类型及其相关运算。
若定义了宏__STDC_IEC_559_COMPLEX__
,则表示该复数支持符合 IEC 60559 标准(即 IEEE 754 的复数扩展),该标准在 C 的附录中有说明。以下函数名在该头文件中被保留,供标准 C 将来可能使用:
cerf, cerfc, cexp2, cexpm1, clog10, clog1p, clog2, clgamma, ctgamma 以及上述函数名带有后缀 f(float 版本)和 l(long double 版本)
C++ 注意事项:对应的标准 C++ 头文件是
<ccomplex>
,但在 C++17 中已被弃用。
如你希望继续翻译
<ctype.h>
、<errno.h>
或其他标准库头文件内容,我可以继续为你翻译。需要吗?