[英]Continuation line trick to adjust Fortran I/O at compile time, with CPP directives, avoiding redundancy
在一些遺留Fortran 77
子例程中,我使用了 position 6 中的續行符號&
和很少的cpp
指令在編譯時調整I/O
- 取決於很少的參數 - 以避免冗余。 看一個更簡單的例子,如下:
open(unit=1,file=opfile,status="unknown",form="unformatted")
!
read(1) a, b, c
!
#ifdef _READMORE
& ,d, e
#endif
!
close(1)
現在,經過一些f90
重構(基本上,將幾乎所有內容都放在modules
中),我正在努力重現上述行為,即當且僅當定義_READMORE
時讀取d
和e
,因為我嘗試了第一個解決方案 - 下面的一個- 無法按預期工作,因為在第一行末尾出現意外&
,如果_READMORE
未定義:
open(unit=1,file=opfile,status="unknown",form="unformatted")
!
read(1) a, b, c &
!
#ifdef _READMORE
,d, e
#endif
!
close(1)
誰能建議我完成這項任務的最佳方法是什么?
如果提議的解決方案仍然依賴於這種延續線技巧並保持向后兼容性,那將是可觀的。
對於顯式版本,我會 go :
open(unit=1,file=opfile,status="unknown",form="unformatted")
!
!
#ifdef _READMORE
read(1) a, b, c &
,d, e
#else
read(1) a, b, c
#endif
!
close(1)
到目前為止,我發現的唯一解決方法是簡單地添加一個read
語句(與許多副作用一起出現):
open(unit=1,file=opfile,status="unknown",form="unformatted")
!
read(1) a, b, c
!
#ifdef _READMORE
read(1) d, e
#endif
!
close(1)
完全避免上面的延續線技巧。 但是,如果我沒記錯的話,當定義_READMORE
時,這將無法讀取由原始Fortran 77
子例程編寫的文件,因為每個read/write
語句都會添加一個換行符:
open(unit=1,file=opfile,status="unknown",form="unformatted")
!
write(1) a, b, c
!
#ifdef _READMORE
& ,d, e
#endif
!
close(1)
不幸的是,我有很多這些文件,我不想以這種方式重新編寫它們。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.