在可移植 C 中定义 NaN,没有“错误 C2124:除以零或取模”

tru*_*ruf 4 c visual-studio-2022

我有一个用纯 C 编写的旧遗留代码。它是跨平台的。我需要在其中定义一个 NaN 常量。我的方法是: const double _NAN = 0.0/0.0;
不幸的是,当我尝试在 Win 机器(VS 2022)上构建代码时,我得到了"error C2124: divide or mod by zero".

我很确定 MSVC 编译器有一个参数可以禁用它,但这是一个公共项目,MS VS 只是可用于构建它的 IDE 之一。我不想要求用户更改特定环境中的默认设置。

我想我可以使用 NaN 的十六进制值,但假设我将面对字节序...这意味着我需要以可移植的方式检测字节序。

有没有更好的选择以跨平台方式在 C 中为 double 定义 NaN?

Eri*_*hil 5

您可以包含<math.h>并使用NAN. C 1999 和 C 2018 7.12 5 都说:

宏观

NAN

当且仅当实现支持该float类型的安静 NaN 时才定义。float它扩展为表示安静 NaN类型的常量表达式。

您可以将它用于类型double,并且,如果您想要处理 C 实现未定义它的情况,您可以使用 进行测试#if defined NAN