gpt4 book ai didi

带有 isnan 宏的 C if 语句括号

转载 作者:太空宇宙 更新时间:2023-11-04 03:25:51 58 4
gpt4 key购买 nike

在 C 中,我曾经能够在 if 条件中使用不带括号的 isnan 宏,如下所示:

#include <math.h>
#include <stdio.h>
void main() {
float x,y,z;
x=0; y=0; z=x/y;
if isnan(z) { // <--- no parens around isnan
printf("z isnan!");
}
}

这在 Ubuntu 15.10 上使用 gcc 5.2.1-22ubuntu2 编译。

但是,在带有 gcc 4.7.4-3ubuntu12 的 Ubuntu 16.04.1 LTS 上,我得到这个 gcc 编译器错误:

error: expected '(' before '__builtin_isnan'

哪个编译器标志允许我在 if 条件中省略括号?

最佳答案

没有编译器标志允许这样做。

编译器(或者,更可能是头文件)在你的实现中工作时可能将 isnan() 定义为括在括号中的宏,例如

 #define isnan(_x) (__builtin_isnan(_x))

这会产生允许您使用的行为的副作用。

但是,isnan() 的定义是实现定义的,因此(除其他事项外)不需要是括在括号中的宏。

实际上,将 if isnan(x) 的所有用法都放在 if (isnan(x)) 中会更好。这将保证您的代码正常工作,即使您的编译器或标准库已更新,或者您的代码已移植到另一个(C99 或更高版本)编译器。

关于带有 isnan 宏的 C if 语句括号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41111566/

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