This is the mail archive of the gcc-help@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: gfortran question about optional subroutine arguments


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 Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]