Передайте нулевой указатель на привязку Fortran C

Скажем, у меня есть функция C void foo(int* val), для которой я написал следующую привязку Fortran C (надеюсь, соответствующую стандарту F2008):

use, intrinsic :: iso_c_binding
...
subroutine foo(val) bind(c)
  integer(kind=c_int), intent(inout) :: val
end subroutine

Реализация функции C void foo(int* val) рассматривает аргумент val как необязательный, проверяя указатель на NULL. Мой вопрос: как я могу настроить и/или использовать привязку Fortran C subroutine foo(val) так, чтобы она поддерживала val как необязательную, то есть так, что на самом деле нулевой указатель передается функции C?


person Michael Schlottke-Lakemper    schedule 29.07.2019    source источник
comment
Связанный вопрос говорит о вызове процедуры Fortran из C (или C++), но концепция та же самая в обратном порядке: используйте атрибут optional с компилятором, поддерживающим эту функцию Fortran 2018.   -  person francescalus    schedule 29.07.2019
comment
Просто чтобы быть уверенным: если я объявлю свой интерфейс Fortran для subroutine foo(val) с val как optional и использую его как call foo(), он действительно вызовет функцию C с foo(0)? Есть ли способ заставить его работать с Fortran 2008?   -  person Michael Schlottke-Lakemper    schedule 30.07.2019
comment
@francescalus Убедительно прошу вас пересмотреть решение об отмене флага-дубликата, поскольку указанный пост на самом деле не отвечает на мой вопрос (он касается противоположного направления вызова и пропускает важную информацию, например, о том, что он работает только с Fortran 2018).   -  person Michael Schlottke-Lakemper    schedule 30.07.2019
comment
Противоположное направление вызова на самом деле не является проблемой: при совместимости с C (как помечено fortran-iso-c- привязка) у нас есть эта симметрия. Что касается различий в функциях между F2008 и F2018/F2008+TS, то это правильное замечание, но оно также подходит для этого вопроса, и на него можно ответить там: пожалуйста, прокомментируйте вопрос/ответ, и мы можем предоставить обходной путь для F2008, если требуется. (Это не значит, что ваш вопрос плохой, просто я рассматриваю систему дублирования как способ избежать размещения связанной информации в ответах на несколько вопросов).   -  person francescalus    schedule 30.07.2019
comment
Я постараюсь дать подходящий ответ на этот вопрос, касающийся ваших вопросов, в ближайшие несколько часов. Если я этого не сделал или вы думаете, что это не учитывает ваши баллы, пожалуйста, отправьте мне еще один запрос.   -  person francescalus    schedule 30.07.2019