Fortran向C传递NULL值
生活随笔
收集整理的這篇文章主要介紹了
Fortran向C传递NULL值
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
?
在很多C或C++的頭文件定義中,NULL被指定定義為0,這里不再具體展開
gfortran的手冊關于iso c binding的章節,定義NULL如下
Moreover, the following two named constants are defined:
| Name | Type? |
| C_NULL_PTR | C_PTR |
| C_NULL_FUNPTR | C_FUNPTR |
?
?
?
Both are equivalent to the value?NULL?in C.
據此,從Fortran向C或C++傳遞空指針還是需要一些技巧,也即需要把傳入參數設置為指針類型C_PTR
接下來是代碼:
#include "stdio.h"int test(int *a, int num) {if(!a){printf("This is null pointer\n");}else{for(int i=0; i<num; i++){printf("Array[%d]=%d\n", i+1, a[i]);}}return 0; }program main use, intrinsic:: iso_c_binding implicit none interfaceinteger(c_int) function func(array, n) bind(c, name="test")importimplicit noneinteger(c_int), intent(in), value:: ninteger(c_int), intent(in):: array(n)end functioninteger(c_int) function func2(pt, n) bind(c, name="test")importimplicit noneinteger(c_int), intent(in), value:: ntype(c_ptr), value:: ptend function end interfacetype(c_ptr) :: a1 integer(c_int), target:: abc(5) integer:: iabc = [12, 12, 35, 67, 11] a1 = c_loc(abc(1)) ! Pass array directly i = func(abc, size(abc)) ! Pass address i = func2(c_loc(abc(1)), 5) ! Pass null pointer i = func2(c_null_ptr, 5) ! Pass null function pointer i = func2(c_null_funptr, 5) end program gfortran code_c.c code_for.f90 -o test
運行結果:
Array[1]=12 Array[2]=12 Array[3]=35 Array[4]=67 Array[5]=11Array[1]=12 Array[2]=12 Array[3]=35 Array[4]=67 Array[5]=11
This is null pointer
This is null pointer
?
轉載于:https://www.cnblogs.com/pasuka/p/4773951.html
總結
以上是生活随笔為你收集整理的Fortran向C传递NULL值的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: (转).gitignore详解
- 下一篇: 交行Kindle优逸白金卡好不好?这些权