See your other post
Please don’t forget the asinine need with the not-yet-fully modern Fortran to include the implicit none statement in all your program units and each of your interface bodies!
Or if you’re really brave, eschew this relic but go with compiler options such as -fimplicit-none though I wouldn’t recommend to be this daring yet in production code.
module cfunctions
use, intrinsic :: iso_c_binding, only : c_int
implicit none
interface
function c_rand() result(r) bind(C, name="rand")
import :: c_int
implicit none
! function result
integer(c_int) :: r
..