level 14
疑似标准库bug?
#include <cstdio>
#include <cmath>
using namespace std;
int main(){
printf("%d %d %d",sizeof(int),sizeof(double),sizeof(abs(1)));
return 0;
}
c艹 reference上面说是int abs(int),然而这里最后一个数是8?(今天acm一道题坑在了这上面……)
g++版本:5.3.1,不过貌似不只这个版本有这个问题……
2016年07月16日 07点07分
1
level 7
sizeof 返回值是 size_t,在 g++ 4.8.4 上实现为 long unsigned int 类型
2016年07月16日 08点07分
3
用 %d 本质上属于类型不匹配
2016年07月16日 08点07分
![[滑稽]](/static/emoticons/u6ed1u7a3d.png)
但printf本身就没必要检查。
2016年07月16日 08点07分
@AS魇梦蚀 全是宏,看不懂,估计能算bug吧……
2016年07月16日 09点07分
level 9
into abs(int)好像在cstdlib里面吧。。。cmath好像有个double abs(T)?
2016年07月16日 09点07分
7
level 14
cmath里不是double abs(double)么
2016年07月16日 10点07分
8
是么……可是手册上明明白白写的int型啊……
2016年07月16日 10点07分
是我说错了,翻了下标准,math.h的是fabs,返回int的abs在stdlib.h里,另外gcc还有内建的abs
2016年07月16日 11点07分
@fyb_main2 cmath里和math.h里不一样,abs被undef之后变成了重载函数了,提供了float,double和long double的版本
2016年07月16日 11点07分