各位大神,请问fortran调用C++函数时变量的传递方式是咋样的?

我想将C++函数运行后的变量值返回到Fortran中,请问如何实现?
以下是我的代码:我想得到经过abs()函数作用后的tn值
fortran部分:
program main
implicit none
INTERFACE
SUBROUTINE abs(i) BIND(C)
USE,INTRINSIC :: ISO_C_BINDING
INTEGER(C_INT), VALUE,INTENT(IN) :: i
END SUBROUTINE abs
END INTERFACE
integer(4)::tn
call trans(tn)
write(*,*) tn
............
end
C++部分
extern "C" void trans(int *tempt)
{
*temp=5;
cout<<*tempt;
}

一只甜甜圈
浏览 156回答 1
1回答

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
打开App,查看更多内容
随时随地看视频慕课网APP