我试图在编译时确定_Float16
支持的:
#define __STDC_WANT_IEC_60559_TYPES_EXT__
#include <float.h>
#ifdef FLT16_MAX
_Float16 f16;
#endif
调用:
# gcc trunk on linux on x86_64
$ gcc -std=c11 -pedantic -Wall -Wextra
t0.c:4:1: warning: ISO C does not support the '_Float16' type [-Wpedantic]
# clang trunk on linux on x86_64
$ clang -std=c11 -pedantic -Wall -Wextra
t0.c:4:1: error: _Float16 is not supported on this target
在这里,我们看到 gcc 和 clang:
- 定义
FLT16_MAX
- 不支持
_Float16
主要问题:如何在编译时正确确定_Float16
支持的?
额外的问题:如果不支持相应的浮动类型,C11(或更新的)标准是否要求不定义 _MIN
/宏?_MAX
例如,对于整数类型 ( <stdint.h>
),它是真的:“它也不应该定义关联的宏”(C11,7.20 整数类型 <stdint.h>,4)。浮动类型也一样吗?
UPD20211117:
- 调用 gcc w/o
-pedantic
会导致警告消失。并且_Float16
得到支持。伟大的! - 调用 clang w/o
-pedantic
不会导致错误消失。可能这是一个错误。
感谢用户 n。1.8e9-where's-my-share m。为了这个想法。
UPD20211118:gcc:-pedantic
已FLT16_MAX
定义,这是意外的(或不是?)。