Это не представляется возможным, по крайней мере переносимым, если вы сделаете подпрограмму bind(C)
.
Как только вы сделаете это bind(C)
, это просто указание указателя, который может быть NULL на стороне C.
subroutine foo(a, b, c) bind(C, name="foo")
real, intent(in), optional :: a, b, c
...
end subroutine foo
(для большей мобильности real(c_float)
от iso_c_binding
модуля следует использовать, но несколько по касательной к этому вопросу)
В C (++)
extern "C"{
void foo(float *a, float *b, float *c);
}
foo(&local_a, NULL, NULL);
, а затем вы можете создайте функцию C++, которая вызывает foo
и которая использует необязательные параметры в стиле C++.
Эта возможность позволила в Fortran в технической спецификации ISO/IEC TS 29113: 2012 по дальнейшей совместимости Fortran с С.
Действительно, это не будет в любом месте без привязки (с). Благодаря! – DavidH