当前位置: C语言 -- 标准库 -- <float.h> -- FLT_SNAN

FLT_SNAN宏


概要:
#include <float.h>
#define FLT_SNAN value	//value值由实现定义。

描述:

该宏表示float类型的信号非数值(signaling NaN)。

只有float类型包含信号非数值,实现才会定义宏FLT_SNAN。该宏会扩展为float类型的表示信号非数值的常量表达式。

编译时如果使用可选的一元+或者一元–运算符后跟信号非数值宏作为初始化器,初始化对象将初始化为信号非数值。


范例:
1 
2 
3 
4 
5 
6 
7 
8 
9 
10 
11 
12 
13 
14 
15 
16 
17 
18 
19 
20 
21 
22 
23 
24 
25 
26 
27 
28 
/*宏FLT_SNAN范例*/

#include <float.h>
#include <stdio.h>
#include <string.h>

int main(void)
{
    #ifdef FLT_SNAN
        float sig_nan = +FLT_SNAN;
        size_t size = sizeof(float);
        unsigned char arr[size];
        memcpy(arr, &sig_nan, size);

        //float类型对象十六进制表示形式。
        printf("Hexadecimal representation of float type object: 0X");
        for(size_t i=0; i<size; i++)
        {
            printf("%02X", arr[size-1-i]);
        }
        printf("\n");
    #else
        puts("The implementation does not define macro FLT_SNAN.");
    #endif

    return 0;
}


输出:

The implementation does not define macro FLT_SNAN.

(注:编译时实现还未支持宏FLT_SNAN。)


相关内容:
DBL_SNAN 表示double类型信号非数值的宏。
LDBL_SNAN 表示long double类型信号非数值的宏。


主要参考资料:

1、ISO/IEC 9899:2024

2、ISO/IEC 9899:2018