msh
msh

Reputation: 23

Type of a hardcoded argument

When I try to compile my code using gfortran 4.4.7 I get the following error message:

Error: Type mismatch in argument 'intkind8' at (1); passed INTEGER(4) to INTEGER(8).

With ifort it does compile, unless I demand the F2003 standard, in which case a similar error is given.

My code:

program kindDummy
    implicit none

    call takeIntKind4And8(0,0)

    contains
        subroutine takeIntKind4And8(intKind4, intKind8)
            implicit none
            integer(kind=4), intent(in) :: intKind4
            integer(kind=8), intent(in) :: intKind8

            print *, 'Integer(kind4): ', intKind4
            print *, 'Integer(kind8): ', intKind8

        end subroutine takeIntKind4And8

end program kindDummy

I was wondering if there's an elegant way to make the compiler "turn" the first 0 into a kind=4 integer, and the second one into a kind=8?

Upvotes: 0

Views: 129

Answers (1)

In

call takeIntKind4And8(0,0)

both zeros have the default kind. The kind numbers are not portable, but your default one is probably 4.

To produce 0 of kind 8 use 0_8:

call takeIntKind4And8(0_4,0_8)

I recommend to stay away from using 4 and 8 directly and use integer constants like 0_ip where ip is an integer constant with the right value. See Fortran: integer*4 vs integer(4) vs integer(kind=4) for more.

Upvotes: 3

Related Questions