Abaqus subroutine debug techdog 專題

我好不容易子一下程序,你卻讓我error的如此徹底,哈哈哈哈~,!!!

       最近在做一些子程序的東西,遇到了各種問題,通往complete的路通常只有一條,但產生error的方式卻有有無數條。有些錯誤完全不是個人能力引發的,而是由體系的不完善或者軟件本身的問題導致,但卻得花大代價debug,浪費大家時間與精力。由此將一些不常見的,甚至于在網外論壇掛了多年的問題拿來討論,希望大家就是錯也都錯在自己的設計問題上,而不是非技術性的、工具自身的問題。

        本貼長期隨緣更,哎,也是在解決了問題后的無聊發泄吧。

1. 空格與Tab鍵對編譯的影響

       Fortran語言對空格和縮進極為敏感,尤其是子程序頭部,極易出錯(???)。由manual給出的子程序接口并未直接告知其實縮進情況。以Dflux子程序為例說明:

       在Sublime中的形式這樣的:

Abaqus subroutine debug techdog 專題的圖1

Abaqus subroutine debug techdog 專題的圖2一次在編輯好后運行,出現以下錯誤:

Abaqus subroutine debug techdog 專題的圖3顯然是第一句出了問題,主要就是縮進問題。這問題在外網上(www.eng-tips.com)都掛老久,但沒人給出有效解答(當然問題可能不一樣)。其它論他論壇,包括Intel的論壇含糊其辭。反復檢查我的語句,長時間排查不出來。因為該例的形式與縮進量都是與另一個成功案是例一致的(我直接CV的),后來,在光標移至前方空格時,發現了失敗案例與成功案例之間的差別:

Abaqus subroutine debug techdog 專題的圖4

原來,之前在Sublime中設置了Tab鍵為兩個空格長,且將橫線轉換為空格。這樣每次打Tab就直接是兩個空格,當時是為了整段代碼端縮進方便而設置的。這就導致我們看起來縮進一致,實際上編譯時是當作不同量來處理的,編譯器不認這個兩個空格的縮進!!

Abaqus subroutine debug techdog 專題的圖5

取消將Tab轉換為空格,這時就可以正常編譯了

Abaqus subroutine debug techdog 專題的圖6此時,不將首句換行也可以正常編譯。

       所以,Tab不等于2個或4個空格的簡單疊加!

       事實上關于Tab鍵與空格在代碼中的應用的差異,人們從不同角度分析,見寫代碼時,縮進使用 tab 還是空格? - 知乎 (zhihu.com),多是考慮一致性,而忽略了本質差異。

       話又說回來,本例遇到的問題實在是個小問題,調整編輯器或者細心點,養成良好的習慣都可以避免這問題,但無論如何,當一個這種基本的問題在一個協同項目中出現時,帶來的時間花費和挫折感是難以接受的(與錯誤層次相比)。聊以提醒初學者。

登錄后免費查看全文
立即登錄
App下載
技術鄰APP
工程師必備
  • 項目客服
  • 培訓客服
  • 平臺客服

TOP

4
2