簡體   English   中英

在編譯時調整 Fortran I/O 的續行技巧,使用 CPP 指令,避免冗余

[英]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時讀取de ,因為我嘗試了第一個解決方案 - 下面的一個- 無法按預期工作,因為在第一行末尾出現意外& ,如果_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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM