Re: Is there a way in Fortran to designate an integer value as integer*8 ?

Liste des GroupesRevenir à cl c  
Sujet : Re: Is there a way in Fortran to designate an integer value as integer*8 ?
De : lynnmcguire5 (at) *nospam* gmail.com (Lynn McGuire)
Groupes : comp.lang.fortran
Date : 03. Oct 2024, 20:32:28
Autres entêtes
Organisation : A noiseless patient Spider
Message-ID : <vdmrgc$3rih7$2@dont-email.me>
References : 1 2 3 4 5 6
User-Agent : Mozilla Thunderbird
On 10/3/2024 10:02 AM, Steven G. Kargl wrote:
On Thu, 03 Oct 2024 02:06:28 -0500, Lynn McGuire wrote:
 
On 10/2/2024 11:27 PM, Steven G. Kargl wrote:
On Wed, 02 Oct 2024 14:30:48 -0500, Lynn McGuire wrote:
>
On 10/2/2024 2:00 AM, Lawrence D'Oliveiro wrote:
On Tue, 1 Oct 2024 21:58:40 -0500, Lynn McGuire wrote:
>
I need many of my integers to be integer*8 in my port to 64 bit.  In
C/C++ code, I can say 123456L to mean a long long value, generally 64
bit.  Is there a corresponding way to do this in Fortran ...
>
       integer(kind = 8), parameter :: bigval = 9223372036854775807_8
       print *, bigval
>
prints
>
       9223372036854775807
>
Thanks !
>
I was afraid of that.  I will have to put _8 in about 100,000 lines of
my F77 code.  And the future conversion to C++ will need special handling.
>
>
If you 100,000 lines of C++ without a trailing 'L', you would
need to add 'L' to get a long int.  You also only need to add
'_8' (or 'L') to those values that would exceed huge(1) in
magnitude as integer*4 is a proper subset of integer*8 and
Fortran does conversion when required.
>
If Fortran does an automatic conversion from I*4 to I*8, why does the
compiler gripe at me that the integer constant does not match the
subroutine argument type ?
 Well, to begin, you were talking about numeric literal constants.
I doubt you add '_8' (or 'L') to all entities declared as 'integer*4'
(or long int).
 integer*8 i ! 42 is integer*4 and automatically converted to integer*8
i = 42      ! on assignment.
i = 3_8 * 2 ! Mixed-mode math.  2 is magically converted to integer*8
 The compiler is not complaining.  It is informing you of an mismatch
between an actual argument and the dummy argument.  If one is 'integer*4'
and the other 'integer*8', you have 32 undefined bits.
 As the person who gave gfortran the -fdefault-integer-8 option, I hope
your XXX kloc of code uses neither equivalence nor common blocks.
I have 197 common blocks included from dedicated files and a massive number of equivalences all over the place.  Several of the equivalences are actually in the common block files.  The equivalences have made the eventual C++ conversion of the Fortran code tricky.
This code is 850,000 lines of F77 code and 50,000 lines of C++ code that dates back to 1965 or so.  Half of the code is Fortran IV and half is F77.  It has been ported to 12 ? different platforms, mostly mainframes in the 1960s, 1970s, 1980s, and 1990s.
Lynn

Date Sujet#  Auteur
7 Jan 25 o 

Haut de la page

Les messages affichés proviennent d'usenet.

NewsPortal