2016-11-17 10 views
2

のためのネームリスト入力ファイルに%記号の周りに許可されていませんここでのテストコードです:の空白が派生型

program testcase 
    implicit none 

    integer :: ios, lu 
    type derived 
     integer :: a 
    end type derived 
    type (derived) :: d 

    namelist /test/ d 

    lu = 3 
    open (lu, file = 'test.dat', status='old', iostat=ios) 
    read (lu, nml = test, iostat=ios) 
    if (ios /= 0) then 
     write (*, *) 'error!' 
    else 
     write (*, *) 'good!', d % a 
    endif 
end program testcase 

このプログラムはタイプ派生タイプderivedあるtestための名前リストが含まれている入力ファイルtest.datを読み込みます。

私はtest.datのための次のコンテンツをしようとすると、それが正常に動作します(それがgood! 7を出力):

&test 
    d%a = 7 
/

は、しかし、次のコンテンツで、私はエラーを取得する:異なる何

&test 
    d % a = 7 
/

Equal sign must follow namelist object name d 

は空白です%派生型のコンポーネントアクセス用の記号。

私はGNU Fortran(gfortran)5.3.0でテストしました。同僚からも、最新のインテルFortranコンパイラで同じ問題が発生したと聞きました。彼はまた、インテルFortranコンパイラの古いバージョンが両方のケースで正常に機能していると主張しました。

この動作は正常ですか?つまり、標準ではネームリスト入力ファイル内の空白文字は%で、空白文字は%で、ソースコードでは許可されていますか?

これは、コンパイラや標準ライブラリの実装のバグですか?

+0

インテルFortranコンパイラ(v12.1.3とv16.0.3)がネームリストを正しく読み込むのに対して、 'gfortran' v4.4.7は'% '文字の周囲に空白があるとエラーが発生することが確認できます。 – chw21

+0

私はエラーメッセージを受け取りました。コード5010です。メッセージは「名前ラベルオブジェクト名dに従わなければなりません」 – chw21

+0

@ chw21ありがとうございます。あなたの情報は、このケースを述べているページを見つけるのに役立ちました。 – xylosper

答えて

1

最後に、この問題について言及した参考文献がいくつか見つかりました。

http://technion.ac.il/doc/intel/compiler_f/main_for/lref_for/source_files/pghnminp.htmから

&group-name object = value [, object = value] .../

...

object

Is the name (or subobject designator) of an entity defined in the NAMELIST declaration of the group name. The object name must not contain embedded blanks except within the parentheses of a subscript or substring specifier. Each object must be contained in a single record.

http://docs.cray.com/books/S-3693-51/html-S-3693-51/i5lylchri.htmlからもう一つは、

2.13.1.1. Names in Name-value Pairs

...

  • A name in an input record must not contain embedded blanks. A name in the name-value pair can be preceded or followed by one or more blanks.

ので、どうやら、名前に空白は許されませんようです。

関連する問題