2017-01-25 5 views
0

コンパイル時の呼び出し元と呼び出しの不一致の検出(ifortの-gen-interfaces -warn interfaces)を使用していくつかの警告を発見しました。私は、次のような状況において、いくつかの警告を受けた:Fortranの呼び出し元と呼び出し先の不一致:サイズ1の配列とスカラー

  1. サブルーチンはケース1からreal*8 x(1)(すなわち配列)
  2. 反対期待しながら、発信者は、サブルーチンに可変real*8 x(すなわちスカラー)を通過します。サブルーチンはx

real*8 xなどを宣言しながら、発信者は、サブルーチンに real*8 x(1)を渡し、それが受け入れられますか?私が見る限り、それに問題はない、私は正しい?それとも問題が起こる可能性がありますか?

+1

おそらく["allow by Fortran standard"](https://stackoverflow.com/q/7805467)と "うまくいく"の違いがあります。許可されていないものは、実際に予期しない問題を引き起こす可能性があります。 – francescalus

+0

これはhttp://stackoverflow.com/questions/41630361/passing-scalars-and-array-elements-to-a-procedure-expecting-an-arrayと非常によく似ています。サブルーチン。 –

+0

以前は機能していましたが、コンパイル後に関数/サブルーチンがリンクされている場合もあります。最近(F90以降)、MODULE/PROCEDUREを使用していずれかを受け入れ、同じ方法で操作を行う方がよいでしょう。コンパイラは基本的にはより優れているので、引数が正しいかどうかのチェックが増えています。通常、多くの問題が(ほとんどの場合、インターフェイスで)発生します。 – Holmz

答えて

0

ターゲットabiがこの標準違反と互換性がない場合は、エラーが発生します。呼び出し先配列をインテント(in)として宣言できる場合は、コール元引数をコンストラクタなどで宣言することで修正できます。 [x]