64位系统上的老程序

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