Fortran Coder

标题: IVF如何编译通过预处理宏 [打印本页]

作者: zhu_youren    时间: 2015-3-16 11:05
标题: IVF如何编译通过预处理宏
编译Fortran程序,其中的一段
[Fortran] 纯文本查看 复制代码
#ifdef COUPLING            
            if (modele2d==1) then
#endif
                call is_in_cell(x,y,kvol,in_cell)
#ifdef COUPLING
            else
                call is_in_cell_1d(x,y,kvol,in_cell)
            endif
#endif

编译不通过:1>src\prepare_obs.f90(131): warning #5117: Bad # preprocessor line
1>src\prepare_obs.f90(133): warning #5117: Bad # preprocessor line
1>src\prepare_obs.f90(135): warning #5117: Bad # preprocessor line
1>src\prepare_obs.f90(139): warning #5117: Bad # preprocessor line
所选平台是VS2012+IVF2013,请问有什么办法可以解决?

捕获.JPG (77.97 KB, 下载次数: 436)

捕获.JPG

作者: vvt    时间: 2015-3-16 11:29
Fortran 语法里没有关于预处理宏的指令,所以都是各家编译器扩展的。

ivf 这样用:

[Fortran] 纯文本查看 复制代码
!DEC$ IF DEFINED ( COUPLING )
             if (modele2d==1) then
!DEC$ endif
                 call is_in_cell(x,y,kvol,in_cell)
!DEC$ IF DEFINED ( COUPLING )
             else
                 call is_in_cell_1d(x,y,kvol,in_cell)
             endif
!DEC$ endif

作者: zhu_youren    时间: 2015-3-16 14:09
vvt 发表于 2015-3-16 11:29
Fortran 语法里没有关于预处理宏的指令,所以都是各家编译器扩展的。

ivf 这样用:

灰常感谢vvt!!!
作者: fcode    时间: 2015-3-16 14:17
define 和 undefine 也不一样,分别是
[Fortran] 纯文本查看 复制代码
!DEC$ DEFINE COUPLING 
!DEC$ UNDEFINE COUPLING

作者: zhu_youren    时间: 2015-3-17 09:05
fcode 发表于 2015-3-16 14:17
define 和 undefine 也不一样,分别是
[mw_shl_code=fortran,true]!DEC$ DEFINE COUPLING
!DEC$ UNDEFINE  ...

受教了,灰常感谢fcode君!!!
作者: zhu_youren    时间: 2015-3-17 09:43
zhu_youren 发表于 2015-3-17 09:05
受教了,灰常感谢fcode君!!!

那简单的总结一下IVF中预处理宏的用法(与C对应)就是
[Fortran] 纯文本查看 复制代码
#ifdef COUPLING → !DEC$ IF DEFINED ( COUPLING ) ,
#endif → !DEC$ endif,
#else → !DEC$ else ,
#define COUPLING →  !DEC$ DEFINE COUPLING   
#undef  COUPLING →  !DEC$ UNDEFINE COUPLING


作者: pasuka    时间: 2015-3-18 14:02
编译的时候加fpp或cpp选项呢?
ivf和gcc照理都是支持的
作者: phcs    时间: 2015-8-3 09:20
#ifndef对应的是什么呢?
作者: vvt    时间: 2015-8-3 13:08
phcs 发表于 2015-8-3 09:20
#ifndef对应的是什么呢?

!DEC$ IF .NOT. DEFINED ( COUPLING )

作者: phcs    时间: 2015-8-3 19:30
vvt 发表于 2015-8-3 13:08
!DEC$ IF .NOT. DEFINED ( COUPLING )

这个在哪儿可以查到呢?您那有什么书上有吗?
作者: vvt    时间: 2015-8-3 20:18
IVF 的帮助文档。可以在开始菜单找到,也可以在安装目录查找。(具体文件名因版本不同而不同。)
作者: phcs    时间: 2015-8-10 08:59
vvt 发表于 2015-8-3 20:18
IVF 的帮助文档。可以在开始菜单找到,也可以在安装目录查找。(具体文件名因版本不同而不同。) ...

你好,我想问下这个#elif对应什么?我找了帮助文档并没有找到对应的关系
作者: fcode    时间: 2015-8-10 09:47
#elif 没有这个东西吧?

是不是 #endif ? 这个对应  # ifdef




欢迎光临 Fortran Coder (http://bbs.fcode.cn/) Powered by Discuz! X3.2