【发布时间】:2019-06-12 15:17:57
【问题描述】:
在 C11,K.3.7.4.1 memset_s 函数中,我发现了一段相当混乱的文字:
与
memset不同,对memset_s函数的任何调用都应严格按照(5.1.2.3)中描述的抽象机规则进行评估。也就是说,对memset_s函数的任何调用都应假定s和n指示的内存将来可以访问,因此必须包含c指示的值。
这意味着memset 不是(必然)“严格按照抽象机器的规则进行评估”。 (引用的章节是5.1.2.3 程序执行。)
我无法理解标准赋予memset 的余地,此处明确排除了memset_s,以及这对任一函数的实现者意味着什么。
【问题讨论】:
-
我认为编译器可能会被允许优化
memset(p, c,..),以防将来它看不到p指向的内存的任何使用。
标签: c language-lawyer