Re: gfortran question about optional subroutine arguments

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Mark Hounschell wrote:
On 03/14/2013 10:03 AM, Tim Prince wrote:
On 3/14/2013 9:39 AM, Mark Hounschell wrote:
When I use -std=f95 this fortran77 code will not compile. Many
different complaints but the most serious are normal variable
declarations:
        INTEGER*8 TOTTIME(0:MAXTASK)            ! Task total exec time (
Error: Nonstandard type declaration INTEGER*8 at (1)
[...]

No I'm not hoping to amend any standard. I have been using different
vendors flavours of fortran 77 since the mid 70s. This is how it's done
on every one I ever used.  I assumed it was standard and can hardly
believe it isn't.

No, it is not in the Fortran standard; however, INTEGER*8, REAL*8 and COMPLEX*16 are very common vendor extensions. Thus, with default options (= -std=gnu), it is supported. Only if you explicitly ask for Fortran 95 conformance checks, it is rejected.

The point is, Tobias  said that anything that builds using -std=legacy
should also build using -std=f95.

That's not what I meant. Rather the other way around:

Every program which builds with -std=f95 also build with -std=f2008, every program which builds with -std=f2008 also builds with -std=gnu (the default), and if it builds with -std=gnu, it also builds with -std=legacy.

In addition, any* valid Fortran 66 or Fortran 77 program builds with -std=f95 (or -std=f2003 or ...). Except that many such programs aren't standard conform as they use vendor extensions.

If the program uses a vendor extension, you might need -std=gnu or -std=legacy. But it only helps if a certain vendor extension is supported.


Regarding INTEGER(8): Fortran 95's intrinsic types support the syntax
  REAL(kind=<constant integer expression>) :: ...

Many compilers use the byte-size for the number, e.g. INTEGER(8) for an 8-byte integer. However, using "8" directly is even less portable than INTEGER*8. One should better use it by selected_real_kind() or via a pre-defined constant such as real64. In any case, it makes it easier to change the precision of the code by changing a single constant in some module.



Tobias

* With the possible exception with -std=f95/f2003/f2008 for features which were deleted in Fortran 95. (Maybe the compiler also only warns for those.)


[Index of Archives]     [Linux C Programming]     [Linux Kernel]     [eCos]     [Fedora Development]     [Fedora Announce]     [Autoconf]     [The DWARVES Debugging Tools]     [Yosemite Campsites]     [Yosemite News]     [Linux GCC]

  Powered by Linux