gpt4 book ai didi

c - 在 double 组上使用 memset(…, 0, …) 是否合法?

转载 作者:太空狗 更新时间:2023-10-29 16:20:45 26 4
gpt4 key购买 nike

将 double 组(使用 memset(…, 0, …))或包含 double 的结构的内存归零是否合法?

这个问题暗示了两个不同的事情:

  1. 从C标准的角度来看:这是not的未定义行为吗? (我认为在任何特定平台上,这都不是未定义的行为,因为它仅取决于 float 在内存中的表示形式——仅此而已。)

  2. 从实用的角度来看:在Intel平台上可以吗? (不管标准是怎么说的。)

最佳答案

C99 标准附件 F 说:

This annex specifies C language support for the IEC 60559 floating-point standard. TheIEC 60559 floating-point standard is specifically Binary floating-point arithmetic formicroprocessor systems, second edition (IEC 60559:1989), previously designatedIEC 559:1989 and as IEEE Standard for Binary Floating-Point Arithmetic(ANSI/IEEE 754−1985). IEEE Standard for Radix-Independent Floating-PointArithmetic (ANSI/IEEE 854−1987) generalizes the binary standard to removedependencies on radix and word length. IEC 60559 generally refers to the floating-pointstandard, as in IEC 60559 operation, IEC 60559 format, etc. An implementation thatdefines __STDC_IEC_559__ shall conform to the specifications in this annex. Wherea binding between the C language and IEC 60559 is indicated, the IEC 60559-specifiedbehavior is adopted by reference, unless stated otherwise.

紧接着:

The C floating types match the IEC 60559 formats as follows:

  • The float type matches the IEC 60559 single format.
  • The double type matches the IEC 60559 double format.

因此,由于 IEC 60559 基本上是 IEEE 754-1985,并且由于它指定 8 个零字节表示 0.0(如@David Heffernan 所说),这意味着如果您找到__STDC_IEC_559__已定义,您可以使用 memset 安全地进行 0.0 初始化。

关于c - 在 double 组上使用 memset(…, 0, …) 是否合法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4629853/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com