Ce n'est pas possible, du moins de manière portative, à moins de rendre la sous-routine bind(C)
.
Une fois que vous l'avez fait bind(C)
il s'agit simplement du passage d'un pointeur qui peut être NULL du côté C.
subroutine foo(a, b, c) bind(C, name="foo")
real, intent(in), optional :: a, b, c
...
end subroutine foo
(pour une plus grande portabilité real(c_float)
de la iso_c_binding
devrait être utilisé, mais cela est quelque peu tangentiel à cette question).
En C(++)
extern "C"{
void foo(float *a, float *b, float *c);
}
foo(&local_a, NULL, NULL);
et ensuite vous pouvez créer une fonction C++ qui appelle foo
et qui utilise des paramètres optionnels de type C++.
Cette capacité a été autorisée dans Fortran dans la spécification technique ISO/IEC TS 29113:2012 sur l'interopérabilité supplémentaire de Fortran avec C.