什么是运行时约束?
What is a runtime-constraint?
我多次听说过 "runtime-constraint" 这个词。我一直在实际标准 ISO/IEC 9899:2018 (C18) 中寻找术语 "runtime-constraint",但我找到的只是:
来源:ISO/IEC 9899:2018 (C18),第 3.18 节:
3.18
1 runtime-constraint
requirement on a program when calling a library function.
我不明白,这句话要表达什么。哪个要求?我比以前明白了。
"requirement" 本身在这里没有任何描述。只是强调,调用库函数时引用的要求应该是存在的,而不是这个要求到底是什么。
这里的 "program" 到底是什么意思?
这是否意味着运行时约束是对可执行文件的要求如何调用库函数?但是为什么可执行文件要调用一个库函数呢?我的观点是可执行文件只是机器代码,需要执行。
- C 中的运行时约束是什么?
这是在运行时对非法值或缺失值进行的检查 - 实际的约束检查取决于所调用的特定库函数。例如,
K.3.5.1.1 The tmpfile_s function
Synopsis
1 #define _ _STDC_WANT_LIB_EXT1_ _ 1
#include <stdio.h>
errno_t tmpfile_s(FILE * restrict * restrict streamptr);
Runtime-constraints
2 streamptr
shall not be a null pointer.
IOW,如果您将 NULL
传递给 streamptr
,那将违反运行时约束,这会导致调用约束处理函数(您可以编写自己的约束处理函数)。如果这有助于形象化的话,它有点像但不是真正的异常处理程序。
每个库函数都定义了自己的要求,因此每个函数都有自己的运行时约束检查。
编辑
正如 Jonathan Leffler 在评论中指出的那样,运行时约束仅适用于附件 K 中指定的边界检查库函数,并且这些库函数是可选的——并非每个实现都支持它们。事实上,C 标准委员会文件 n1967 表明没有实现完全支持它们,C11 和 C18 附件 K 中指定的功能可能会从 C 标准的未来版本中删除。
我多次听说过 "runtime-constraint" 这个词。我一直在实际标准 ISO/IEC 9899:2018 (C18) 中寻找术语 "runtime-constraint",但我找到的只是:
来源:ISO/IEC 9899:2018 (C18),第 3.18 节:
3.18
1 runtime-constraint
requirement on a program when calling a library function.
我不明白,这句话要表达什么。哪个要求?我比以前明白了。
"requirement" 本身在这里没有任何描述。只是强调,调用库函数时引用的要求应该是存在的,而不是这个要求到底是什么。
这里的 "program" 到底是什么意思?
这是否意味着运行时约束是对可执行文件的要求如何调用库函数?但是为什么可执行文件要调用一个库函数呢?我的观点是可执行文件只是机器代码,需要执行。
- C 中的运行时约束是什么?
这是在运行时对非法值或缺失值进行的检查 - 实际的约束检查取决于所调用的特定库函数。例如,
K.3.5.1.1 The tmpfile_s function
Synopsis
1#define _ _STDC_WANT_LIB_EXT1_ _ 1 #include <stdio.h> errno_t tmpfile_s(FILE * restrict * restrict streamptr);
Runtime-constraints
2streamptr
shall not be a null pointer.
IOW,如果您将 NULL
传递给 streamptr
,那将违反运行时约束,这会导致调用约束处理函数(您可以编写自己的约束处理函数)。如果这有助于形象化的话,它有点像但不是真正的异常处理程序。
每个库函数都定义了自己的要求,因此每个函数都有自己的运行时约束检查。
编辑
正如 Jonathan Leffler 在评论中指出的那样,运行时约束仅适用于附件 K 中指定的边界检查库函数,并且这些库函数是可选的——并非每个实现都支持它们。事实上,C 标准委员会文件 n1967 表明没有实现完全支持它们,C11 和 C18 附件 K 中指定的功能可能会从 C 标准的未来版本中删除。