Fortran Coder

查看: 25070|回复: 12
打印 上一主题 下一主题

[编译器] IVF如何编译通过预处理宏

[复制链接]

9

帖子

2

主题

0

精华

入门

F 币
84 元
贡献
37 点

规矩勋章

跳转到指定楼层
楼主
发表于 2015-3-16 11:05:22 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
编译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, 下载次数: 502)

捕获.JPG
分享到:  微信微信
收藏收藏 点赞点赞 点踩点踩

954

帖子

0

主题

0

精华

大师

F 币
184 元
贡献
75 点

规矩勋章元老勋章新人勋章水王勋章热心勋章

QQ
沙发
发表于 2015-3-16 11:29:02 | 只看该作者
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

9

帖子

2

主题

0

精华

入门

F 币
84 元
贡献
37 点

规矩勋章

板凳
 楼主| 发表于 2015-3-16 14:09:09 | 只看该作者
vvt 发表于 2015-3-16 11:29
Fortran 语法里没有关于预处理宏的指令,所以都是各家编译器扩展的。

ivf 这样用:

灰常感谢vvt!!!

2022

帖子

12

主题

5

精华

论坛跑堂

臭石头雪球

F 币
1598 元
贡献
689 点

美女勋章热心勋章星光勋章新人勋章贡献勋章管理勋章帅哥勋章爱心勋章规矩勋章元老勋章水王勋章

地板
发表于 2015-3-16 14:17:37 | 只看该作者
define 和 undefine 也不一样,分别是
[Fortran] 纯文本查看 复制代码
!DEC$ DEFINE COUPLING 
!DEC$ UNDEFINE COUPLING 

9

帖子

2

主题

0

精华

入门

F 币
84 元
贡献
37 点

规矩勋章

5#
 楼主| 发表于 2015-3-17 09:05:56 | 只看该作者
fcode 发表于 2015-3-16 14:17
define 和 undefine 也不一样,分别是
[mw_shl_code=fortran,true]!DEC$ DEFINE COUPLING
!DEC$ UNDEFINE  ...

受教了,灰常感谢fcode君!!!

9

帖子

2

主题

0

精华

入门

F 币
84 元
贡献
37 点

规矩勋章

6#
 楼主| 发表于 2015-3-17 09:43:24 | 只看该作者
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 

评分

参与人数 1F 币 +9 贡献 +4 收起 理由
fcode + 9 + 4 赞一个!

查看全部评分

490

帖子

4

主题

0

精华

大宗师

F 币
3298 元
贡献
1948 点

水王勋章元老勋章热心勋章

7#
发表于 2015-3-18 14:02:28 | 只看该作者
编译的时候加fpp或cpp选项呢?
ivf和gcc照理都是支持的

10

帖子

2

主题

0

精华

入门

F 币
109 元
贡献
31 点
8#
发表于 2015-8-3 09:20:31 | 只看该作者
#ifndef对应的是什么呢?

954

帖子

0

主题

0

精华

大师

F 币
184 元
贡献
75 点

规矩勋章元老勋章新人勋章水王勋章热心勋章

QQ
9#
发表于 2015-8-3 13:08:58 | 只看该作者
phcs 发表于 2015-8-3 09:20
#ifndef对应的是什么呢?

!DEC$ IF .NOT. DEFINED ( COUPLING )

10

帖子

2

主题

0

精华

入门

F 币
109 元
贡献
31 点
10#
发表于 2015-8-3 19:30:36 | 只看该作者
vvt 发表于 2015-8-3 13:08
!DEC$ IF .NOT. DEFINED ( COUPLING )

这个在哪儿可以查到呢?您那有什么书上有吗?
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

捐赠本站|Archiver|关于我们 About Us|小黑屋|Fcode ( 京ICP备18005632-2号 )

GMT+8, 2024-11-23 23:27

Powered by Tencent X3.4

© 2013-2024 Tencent

快速回复 返回顶部 返回列表