我已经多次听说过“运行时约束”一词。我一直在实际标准ISO / IEC 9899:2018(C18)中寻找“运行时约束”一词,但发现的是:
资料来源:ISO / IEC 9899:2018(C18),第3.18节:
3.18
1运行时约束
调用库函数时对程序的要求。
我不明白,这句话应该表达什么。有什么要求?我了解得比以前少了。
这里没有以任何方式描述“需求”本身。仅强调指出,在调用库函数时,引用的要求应是现存的,而不是该要求的确切含义。
“程序”到底是什么意思?
这是否意味着对可执行文件的要求是运行时约束,即如何调用库函数?但是为什么可执行文件要调用库函数呢?我的观点是,可执行文件只是机器代码,需要执行。
这是在运行时对非法或缺失值进行的检查-实际的约束检查取决于所调用的特定库函数。例如,
K.3.5.1.1 tmpfile_s函数
提要
1#define _ _STDC_WANT_LIB_EXT1_ _ 1 #include <stdio.h> errno_t tmpfile_s(FILE * restrict * restrict streamptr);
运行时约束
2streamptr
不能为空指针。
IOW,如果NULL
为传递,则streamptr
是运行时约束冲突,这将导致调用约束处理函数(您可以编写自己的约束处理函数)。如果可以帮助可视化它,则它是一种但不是真正的异常处理程序。
每个库函数定义了自己的要求,因此每个库函数都有其自己的运行时约束检查。
编辑
正如乔纳森·莱夫勒(Jonathan Leffler)在评论中指出的那样,运行时约束仅适用于附件K中指定的边界检查库函数,并且这些库函数是可选的—并非每个实现都支持它们。实际上,C标准委员会的论文n1967指出,没有实现完全支持它们,并且C11和C18附件K中指定的功能可能会从C标准的未来版本中删除。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句