LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1125|回复: 6

晕倒,gcc 不能区分正负数

[复制链接]
发表于 2008-1-25 19:53:33 | 显示全部楼层 |阅读模式
#include <stdio.h>

int main()
{
  int i = 0;
  printf("%d", -10*abs(i+1));
  return 0;
}


正确答案应该是 -10,然而无论是 gcc 4.2.X 还是 gcc 3.4.X 给出的答案都是 10

如果要避免这个 bug,需要开启编译选项 -fno-builtin
 楼主| 发表于 2008-1-25 19:54:16 | 显示全部楼层

晕倒,gcc 不能区分正负数

#include <stdio.h>

int main()
{
    int i = 0;
    printf("%d", -10*abs(i+1));
    return 0;
}


正确答案应该是 -10,然而无论是 gcc 4.2.X 还是 gcc 3.4.X 给出的答案都是 10

如果要避免这个 bug,需要开启编译选项 -fno-builtin
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-1-25 19:54:56 | 显示全部楼层
这个坛子里没几个真正的程序员吧,嘿嘿

发重了,版主帮忙删掉一个吧
回复 支持 反对

使用道具 举报

发表于 2008-1-25 21:41:07 | 显示全部楼层
$gcc test.c
$./a.out
-10

$ gcc -v
Using built-in specs.
Target: i486-linux-gnu
Configured with: ../src/configure -v --enable-languages=c,c++,fortran,objc,obj-c++,treelang --prefix=/usr --enable-shared --with-system-zlib --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --enable-nls --with-gxx-include-dir=/usr/include/c++/4.2 --program-suffix=-4.2 --enable-clocale=gnu --enable-libstdcxx-debug --enable-mpfr --enable-targets=all --enable-checking=release --build=i486-linux-gnu --host=i486-linux-gnu --target=i486-linux-gnu
Thread model: posix
gcc version 4.2.3 20071123 (prerelease) (Debian 4.2.2-4)


楼主是什么发行版和gcc版本?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-1-25 21:58:35 | 显示全部楼层
你的这个打过补丁了
不过治标不治本......可能还有其他类型的优化 bug
目前最好的方法是打开 -fno-builtin 的编译选项

$ gcc -v
Using built-in specs.
Target: i686-pc-linux-gnu
Configured with: ../gcc-4.2.0/configure --prefix=/home/sltk/ --enable-optimize --with-cpu=i686 --with-arch=i686 --with-tune=i686 --with-gmp=/home/sltk/ --with-mpfr=/home/sltk/ --enable-threads --enable-languages=c,c++,fortran,java
Thread model: posix
gcc version 4.2.0
回复 支持 反对

使用道具 举报

发表于 2008-1-26 03:59:36 | 显示全部楼层
印象中,这个bug已经fixed吧?只是不知道有没有已发布的版本包含了这个补丁。 bug肯定是有的,上gcc网站查一下,一大堆呢。
回复 支持 反对

使用道具 举报

发表于 2008-1-26 09:42:47 | 显示全部楼层
去年的时候就有人说过了:
http://linux.solidot.org/article.pl?sid=07/11/19/0512218
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表