警告:GNU扩展

Vin*_*tha 1 fortran r gfortran cran fortran95

当我将我的包提交给CRAN时,它不会通过自动传入检查并发出以下警告:

* checking whether package 'EpiILM' can be installed ... WARNING
  Found the following significant warnings:
  Warning: GNU Extension: Different type kinds at (1)
Run Code Online (Sandbox Code Playgroud)

和相应的日志文件说

  Epimcmc.f95:440.25:

        psi= min(1.0,exp(ratio))
                     1
 Warning: GNU Extension: Different type kinds at (1)
Run Code Online (Sandbox Code Playgroud)

当我使用R CMD CHECK和R CMD CHECK --as-cran测试我的包装时,都不会产生任何警告或注释.我正在使用R版本3.3.2(2016-10-31) - 我的MacOS上的"真诚的南瓜补丁"和代码是用Fortran 95编写的.

有什么建议?

Vla*_*r F 5

您的代码太短而无法准确诊断,但可以安全地推断出代码中未显示的部分是什么.

ratio的类型与默认类型不同,可能是"双精度".

但是1.0是默认类型(也就是单精度).

min()在Fortran中不允许混合使用不同种类,但是您可以在以下位置执行此操作:

  min(1.0,exp(ratio))
Run Code Online (Sandbox Code Playgroud)

要解决此问题,请使用相同类型的文字ratio.所以,如果它是double precision,你可以使用:

  min(1.0d0, exp(ratio))
Run Code Online (Sandbox Code Playgroud)

如果它是一些 real(rk)你可以使用

  min(1.0_rk, exp(ratio))
Run Code Online (Sandbox Code Playgroud)

real(.., kind=rk)也可以使用该功能.


警告说GNU Fortran编译器认为它在Fortran中是不允许的,但允许它作为非标准扩展.CRAN编码标准是否允许使用此扩展是一个不同的问题.可能不会,如果它被拒绝了.