gfortran 新坑: 未初始化的变量不会给警告
每当遇到些意外的时候,也就是初坑了的时候,我就要写篇日志了。
这两天模拟一篇 PRL 上文章,结果一直不对。我一直以为是随机模拟的数据错了,最后用了一个很笨的办法,看出来,原来是理论曲线算错了。
这实在是一个很奇怪的事情,因为算理论曲线的那个程序,相当清晰,而且是在我加了 -Wall 参数编译以后,没有任何警告就通过了。程序运行起来也没有任何的问题,但是结果不对。
只好拿着代码,一行一行慢慢看,寻找每一个变量的来源,与公式进行对照。忽然间,发现一个参数定义了,但是没有初始化。这頗为让我惊讶。如果一个变量声明了,没有使用,会有一个警告的。但变量声明了,没有定义而使用了,竟然半点警告也没有。
我记不清Fortran标准里面有没有规定一个变量如果没有初始化,哪种情况下会被初始化为 0。在 C 语言里面,函数里面的自动变量(main也是函数), 如果没有初始化,值会是随机的,不管是教科书,还是编译器,都给了警告。gfortran 竟然不会给警告,真是难以让人相信。
我继续查看 gfortran 的文档,想开启更多的检查开关,结果发现了如下一些项。
-ffpe-trap=invalid,zero,overflow,underflow,denormal
开启浮点数异常的检查,以及
-finit-real=snan
来把real型变量初始化为 snan. snan 是在开了检查之后会报错的 Nan.
2022年8月10日 12:48
Zen Internet Broadband is considered as the fastest & reliable broadband for both home & business purpose. The company is having the strength of approximately 413 employees & all of them being dedicated & hard working people making the internet services very reliable. ZENBroadband Because of the hard work of the employees as well as CEO (Paul Stobard) & Chairman (Richard Tang), the company won several awards in 2006 at ISPA i.e. Internet Service Provider’s Association.
2023年4月12日 16:41
Have you ever heard of celeb networth - the famous website for celebrities information?