基本的な欠点はなく、同じコンパイラには基本的な利点はありません。
iccでも、long intは32ビットと64ビットOSで異なりますので、知る必要があります(または、c-sideで必要なものを定義する必要があります)。
明らかに4バイトである唯一のものはC_INT32_Tなので、私が一般的に使用しているものです。さらに、C_INT32_Tを使用して固定サイズのビットサイジングにしたいと思うように定義するための "将来の校正"の努力が増えています。
これらはすべてiFortに4バイト整数を与えます。
USE ISO_C_BINDING, ONLY : C_INT, C_INT32_T
Integer ::
INTEGER(KIND=4) :: !"B" At least on iFort
INTEGER*4 !"A"
INTEGER(KIND=C_INT) ::
INTEGER(KIND=C_INT32_T) :: !"C"
通常、「A」というスタイルの古いコードを検出します。
私は日常的に "B"のスタイルを使用していますが、これは "デファクトスタンダード"ですが、 "標準"に準拠していません。
私が移植性に懸念を抱くと、 "B"スタイルが "C"スタイルに変更され、その後、gfortranコンパイラで後でコンパイルされる可能性がある他の人たちを考慮して、他のコンパイラ。
シングルバイト:
BYTE :: !Good
INTEGER(KIND=1) ::
INTEGER(KIND=C_SIGNED_CHAR) ::
INTEGER(KIND=C_INT8_T) :: !Best
2バイト:
INTEGER(KIND=2) ::
INTEGER(KIND=C_INT16_T) :: !Best
INTEGER(KIND=C_SHORT) ::
8バイト:
INTEGER(KIND=8) ::
INTEGER(KIND=C_INT64_T) :: !Best
INTEGER(KIND=C_LONG_LONG) ::
これはやや怪しい見えますが...一つは、また言うことができる:
LOGICAL(KIND=4) ::
LOGICAL(KIND=C_INT32_T) :: !Best here may be C_bool and using 1-byte logical in fortran...? Assuming that there is no benefit with the size of the logical being the same as some float vector
LOGICAL(KIND=C_FLOAT) ::
は、あなたと私が使用してコンパイラに同じであってもよいが、一部はc_intの一致が – tim18
をc_longの持っているかもしれませんが、なぜ、デフォルトのint型のサイズはFortranとCとの間で異なるのでしょうか?そして、おそらく、愚かなことに、私のcコードをデフォルトのintサイズのcコンパイラでコンパイルしてから、Fortranコンパイラでデフォルトのintサイズを別のサイズに設定することができました。私は 'C_INT'がこれを絶縁しているとは想像できません。 – EMiller