Ich möchte einen Integer-Parameter basierend auf seiner hexadezimalen Darstellung deklarieren. Was sind die Unterschiede zwischen: (. Und ja, ich weiß, dass dies nur -1
ist)Hexadezimale Konstanten
INTEGER(kind=int32), PARAMETER :: a = Z'FFFFFFFF'
INTEGER(kind=int32), PARAMETER :: b = int(Z'FFFFFFFF', kind=int32)
INTEGER(kind=int32), PARAMETER :: c = transfer(Z'FFFFFFFF', 1_int32)
gfortran
mich während der Kompilierung einen Integer-Überlauf-Fehler zu geben scheint (sagen mir helfend, dass ich ignorieren kann, dass mit -fno-range-check
) für die obigen a
und b
, aber nicht für c.
Ich muss es Fortran 2003 konform machen, da dieser Code mit anderen Compilern anderswo kompiliert werden kann.
IIRC gab es einige Regeländerungen zwischen Fortran 2003 und 2008. Brauchen Sie streng 2003? –
Der Kodierungsstandard für die Software-Fortran 2003 – chw21