语言陷阱:ADS 1.2编译使用long long的诡异错误

本来是计划写关于erlang的mnesia的,在版本5.6.5会出现的一个问题,但我更新到了最新的5.7.4之后,问题消失了,即使使用5.6.5来编译也不会出现问题,只好不了了之。
不过,昨天,同事遇到了一个问题,在类似下面的代码中:


       static const long long flag = (1LL< <32)|(1LL<<34);
       void fun()
       {
       long long temp = flag;
       }

       

编译时,会出现诡异的Fatal error: Internal fault: 0xe6e5,但在我这边却没有出现,编译选项等等都是一样的。
只能使用下面的代码才能解决问题:

       void fun()
       {
       long long temp = (long long)flag;
       }
       

使用强制转换。

发布者

rix

如果连自己都不爱自己,哪还有谁来爱你