之前写的某小程序在新的64位系统上seg fault了……
gdb之后,发现是getenv()返回了一个很小的负数…… 但是getenv()返回类型是char*,应该或者返回地址或者返回NULL啊……
编译的时候有个warning,说将int转化为了pointer……
其实就是忘了#include
32位系统上无所谓,反正int和char*一样大。64位就不一样了,int只有32位。
于是,在没有声明的情况下,返回值只拿到了后32位…… 再赋给char*自然也不行。
所以c这个没有声明直接可以用的特性有什么好的,而且连个没声明的警告也没有(貌似新的gcc会给……),不如直接编译失败……
clang会怎么样?
clang给了一堆warning……