是否有Fortran编译器选项用于警告写后冲突?

是否有Fortran编译器选项用于警告写后冲突?,fortran,compiler-warnings,Fortran,Compiler Warnings,假设您有以下代码: INTEGER :: num_samples num_samples = 10000 num_samples = 1 显然,第一个num_samples=10000没有任何作用,它的存在可能表明程序员出错(例如,程序员打算注释掉下面的行,反之亦然)。是否有任何Fortran编译器会针对这种一次又一次写入错误发出警告,如果有,哪些选项会启用警告? (我也对有这样的警告的C++编译器感兴趣,如果有java IDE提供了这样的警告,但现在我将重点放在事物的FORTRAN方面。)

假设您有以下代码:

INTEGER :: num_samples
num_samples = 10000
num_samples = 1
显然,第一个
num_samples=10000
没有任何作用,它的存在可能表明程序员出错(例如,程序员打算注释掉下面的行,反之亦然)。是否有任何Fortran编译器会针对这种一次又一次写入错误发出警告,如果有,哪些选项会启用警告?
(我也对有这样的警告的C++编译器感兴趣,如果有java IDE提供了这样的警告,但现在我将重点放在事物的FORTRAN方面。)

< P>这是一个奇怪的问题,从我的角度来看。您提到的这种先写后写的情况是一个逻辑错误。编译器主要检测语法错误。在某些情况下,逻辑错误可能显示为语法错误,但并不总是如此

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

我也感兴趣的是,如果C++编译器有这样的警告,如果有java IDE提供了这样的警告,但现在我将重点放在事物的FORTRAN方面。
看看函数式编程语言。由于不变性,一次又一次写的情况是不可能发生的。;-)

我不认为会有任何编译器检查这一点,或者给你一个选项来警告这一点。有一些可用的代码分析工具可以试用,比如“forcheck”、“fortranlint”、“understand”,它们适用于fortran源代码。我想不出任何工具。有编译器或工具可以检测未初始化的变量和死代码(例如SPAG),我不同意。编译器可以检测的不仅仅是语法错误。以未使用的伪参数为例。这不是一个错误,但许多(大多数?)编译器都会对这些错误发出警告。我认为编译器可以很容易地检测到一次又一次写入的情况(在优化中使用这种方法,第一次赋值将被跳过),但可能没有足够的需求向用户提供警告。@eriktous:是的。也许我太用力了。没错,编译器可以检测到的不仅仅是语法错误。我的观点是他们不应该这样做,“真正”的函数式编程语言不允许一次又一次的写错误,但我熟悉的LISP实现不是100%的函数式,因此确实存在这种可能性。我想我记得我听到过这样一个习语,即所有支持GUI的函数式编程语言都会为了实现这一点而破坏其部分功能性。(尽管我意识到,每当一个人说“全部”时,就会听到异常。)LISP不是函数式编程语言,它是多范式的。