RISEBY
// cplusplus source: cmain.cpp#include <iostream>extern "C" void get(int& tmp) {std::cin >> tmp;if (std::cin.good())std::cout << "function \"get\" in C++:\t" << tmp << std::endl;else {std::cerr << "ERROR: get a value failure" << std::endl;tmp = 0;}}extern "C" void put(const int& tmp) {// output numeric: 0xnnn formattingstd::cout.setf(std::ios_base::hex, std::ios_base::basefield);std::cout.setf(std::ios_base::showbase);std::cout << "function \"put\" in C++:\t" << tmp << std::endl;}!!! Fortran source: fmain.f08module croutineinterface!names difference between C++ and Fortran routine heresubroutine rcget(item) bind(C, name='get')use, intrinsic :: iso_c_bindinginteger(c_int), intent(inout) :: itemend subroutine rcgetsubroutine put(item) bind(C)use, intrinsic :: iso_c_bindinginteger(c_int), intent(in) :: itemend subroutine putend interfaceend module croutine;program mainuse croutineuse, intrinsic :: iso_c_bindinginteger(c_int) :: dat = 0print *, "value in Fortran: ", datcall rcget(dat)print *, "value after called C++ function", datcall put(dat)print *, "Finish, has returned to Fortran"end program