Fortran Standard is clearly stating that the kind numbering is arbitrary and implementation dependent. Best is to go with the basic Fortran types:
real8 as of today and the compilers which support this: double precision (is C interoperable with c_double)
real4 as of today and the compilers which support this: real (is C interoperable with c_float)
To get Fortran logical working at all you need to define logical always as logical(kind=c_bool) (you can as well use logical(c_bool), which I personally find nicer).