章节大纲

  • <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> 或其他标准库头文件内容,我可以继续为你翻译。需要吗?