我需要知道海湾合作委员会是否有一种方法来检查那些令人敬畏的存在__builtin_MY_DESIRED_FUNCTIONs
例如,我想使用__builtin_nan
并确保它可用于我的程序并且在编译期间不会失败。
我会更具体:在 clang 上有__has_builtin
“检查器”所以我们可以这样写
#if __has_builtin(__builtin_nan)
但我找不到 gcc 的模拟。
也许我可以只依赖 gcc,就像“哦,我现在使用 gcc,让我们假设所有这些__builtin_
在这里,就像下面的例子一样......”
#if __GNUC__
double mynan = __builtin_nan("0");
#endif
也许它会起作用,直到有人放置这个“-fno-builtin”编译标志。
好消息! A__has_builtin https://gcc.gnu.org/onlinedocs/gcc-10.1.0/cpp/_005f_005fhas_005fbuiltin.html#g_t_005f_005fhas_005fbuiltin已添加到 GCC 10 中(请参阅更改注释 https://gcc.gnu.org/gcc-10/changes.html):
特殊运算符 __has_builtin(操作数)可以用在常量中
整数上下文以及预处理器‘#if’和‘#elif’表达式
测试由其操作数命名的符号是否被识别为
GCC 在当前语言和一致性模式下内置的函数。
如果满足以下条件,则其计算结果为具有非零值的常量整数:
argument 指的是这样的函数,否则为零。这
运算符也可以用在预处理器“#if”和“#elif”中
表达式。 __has_builtin 运算符本身,没有任何操作数
或括号,充当预定义的宏,以便支持它
在可移植代码中进行测试。因此,建议使用运算符
如下:
#if defined __has_builtin
# if __has_builtin (__builtin_object_size)
# define builtin_object_size(ptr) __builtin_object_size (ptr, 2)
# endif
#endif
#ifndef builtin_object_size
# define builtin_object_size(ptr) ((size_t)-1)
#endif
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)