2011-03-24 71 views
0

比方说,你有下面的代码:Fortran编译器选项是否存在关于写后写冲突的警告?

INTEGER :: num_samples 
num_samples = 10000 
num_samples = 1 

很明显,第num_samples = 10000什么都不做,它的存在可能表明一个编程错误(例如,程序员意味着注释掉以下行,反之亦然)。是否有任何Fortran编译器会针对写后写后错误发出警告,如果有的话,哪些选项会启用警告?我也很感兴趣,如果有C++编译器有这样的警告,并且如果有Java IDE提供这样的警告,但现在我专注于Fortran方面的事情。)

+3

我不认为会有任何编译器检查它,或给你一个选项来警告。有一些代码分析工具可供您试用,比如forcheck,fortranlint,以及fortran源代码。 – steabert 2011-03-24 16:04:40

+0

我想不出任何。有编译器或工具来检测未初始化的变量和死代码(例如,SPAG,http://www.polyhedron.com/spag0html)。 – 2011-03-25 16:10:44

回答

0

这是一种奇怪的问题从我的角度来看。你提到的这种写后写情况是逻辑错误。编译器主要检测到语法错误。在某些情况下,逻辑错误可能会将自己显示为语法错误,但并非总是如此

逻辑错误意味着你在实现算法时犯了一个错误。您只能在测试时注意到它。或者你也可以尝试静态程序分析(如上面提到的steabert)。

我也很感兴趣,如果有C++编译器带有这样的警告,并且如果有Java IDE提供这样的警告,但现在我专注于Fortran方面的事情。

看看函数式编程语言。由于不变性,写后写情况就不会发生。 ;-)

+2

我不同意。编译器不仅可以检测语法错误。举例来说,请使用未使用的虚拟参数。不是一个错误,但许多(大多数?)编译器可以给你一个警告。我认为编译器可以很容易地检测写后写情况(像这样的东西用于优化,第一个任务只会被跳过),但是可能没有足够的需求来向用户提供警告。 – eriktous 2011-03-25 16:25:29

+0

@eriktous:是的。也许我太努力了。你是对的编译器可以检测到比语法错误更多的东西。我的观点是,他们不应该这样做。 – Wildcat 2011-03-25 21:18:27

+0

一个“真正的”函数式编程语言不允许write-after-write错误,但我熟悉LISP的实现不是100%功能,因此确实遭受这种可能性。我想我记得听过它是一种习惯用语,所有支持GUI的函数式编程语言都会颠覆其功能性的一部分,以此来实现这一点。 (虽然我意识到每当有人说“所有”时都会听到关于这个异常的消息。) – 2011-03-26 11:04:42