-fbounds-checkをつけるとcharacterの長さにも厳格になっちゃう問題

環境

$ gfortran --version
GNU Fortran (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0
Copyright (C) 2021 Free Software Foundation, Inc.

エラー状況

デバッグ時によくコンパイラオプションで -fbounds-check をつけると思うのだが,これをつけることで(なくても正常に動作するのに)エラーになってしまうケースがあった.
エラー内容は書きの通り.

At line 269 of file mod_mygmt_gridio.f90
Fortran runtime error: Actual string length is shorter than the declared one for dummy argument 'infilename' (111/256)

どうやら subrountine 内で character 型の引数を宣言してそのときに長さも確保しているので,bounds-check が入って長さが実際の引数の文字列長と違うじゃないか,ということらしい.

  character(len=256), intent(in) :: infilename


対処

可変長 (len=*) にする.やることはサブルーチンでの文字列変数の引き渡しに書いたことと同じ.

  character(len=*), intent(in) :: infilename

Front page   Edit Diff Attach Copy Rename Reload   New List of pages Search Recent changes   Help   RSS of recent changes
Last-modified: 2024-09-19 (Thu) 05:41:18 (14d)