Може ли масив от предполагаеми форми на Fortran 90 да бъде НЕЗАДЪЛЖИТЕЛЕН аргумент?

ЗАБЕЛЕЖКА: Все още проучвам този проблем – моля, не го разглеждайте още – грешката може да е другаде

Бих искал аргументът към подпрограмата да е НЕЗАДЪЛЖИТЕЛЕН, но този аргумент също се оказва масив с предполагаема форма. Когато се опитвам да компилирам модула, съдържащ тази подпрограма, получавам следната грешка:

PGF90-S-0189-Аргумент номер 3 към (рутина): свързване на скаларен действителен аргумент към фиктивен аргумент на масив (местоположение)

Рутината изглежда така:

SUBROUTINE EXAMPLE(A, B, C)
   IMPLICIT NONE
   INTEGER, INTENT(IN) :: A, B
   INTEGER, OPTIONAL, DIMENSION(:), INTENT(IN)   :: C
   INTEGER :: TEST

   IF (PRESENT(C)) THEN
      TEST=C(1)
      PRINT *,TEST
   ELSE
      PRINT *,A,B
   ENDIF

END SUBROUTINE EXAMPLE

Съдържа се в модул. Получавам грешката, когато се опитвам да го извикам само с два аргумента от подпрограма, която ИЗПОЛЗВА модула.

Намерих само един вероятно свързан въпрос във форумите на Portland Group тук:

http://www.pgroup.com/userforum/viewtopic.php?t=624&sid=d76fdf8ca2bf4fc3109f4f49b1de0ad7

Отговорът се свежда до това, че потребителят използва незадължителен аргумент, който не е разпределен - не знам дали това се отнася за моя случай, тъй като не използвам „C“ извън блока IF(PRESENT(C)), но може ли да има имплицитно разпределение, когато се дефинира променлива като предполагаема форма, която не може да бъде извършена, когато не е предадена на първо място?


person Chris Whittleston    schedule 28.03.2014    source източник
comment
Това не е точният код, просто взех същността на това, което прави като опростена илюстрация. Преименувах подпрограмата на EXAMPLE, за да предотвратя това, което изглеждаше като сблъсък на имена.   -  person Chris Whittleston    schedule 28.03.2014
comment
Няма категорична забрана за използване на optional с манекен с приета форма. Това не означава, че всички употреби са правилни, така че можете ли да предоставите MCVE за вашия проблемен случай?   -  person francescalus    schedule 28.03.2014
comment
Съобщението за грешка, което съобщавате, няма нищо общо с незадължителна или предполагаема форма - то се оплаква, че сте предали скалар към аргумент на масив, което не е разрешено от стандарта (с някои изключения). Обсъждам това в софтуер. intel.com/en-us/blogs/2009/03/31/ . Тъй като не сте ни показали обаждането, трудно е да бъда по-конкретен.   -  person Steve Lionel    schedule 28.03.2014
comment
Благодаря за отговорите, ще добавя допълнителни подробности, включително обаждането, когато не съм в движение.   -  person Chris Whittleston    schedule 28.03.2014
comment
Току-що написах опростена версия на това, което е в действителния код и сега изглежда, че работи, така че подозирам, че проблемът не е това, което първоначално мислех. Ще направя още малко разследване и ще актуализирам това, когато го направя.   -  person Chris Whittleston    schedule 29.03.2014


Отговори (1)


Този проблем вече е разрешен - наистина можете да използвате масиви с предполагаема форма като незадължителни аргументи. Както е посочено в коментарите - грешката произтича от стара версия на изходен файл, който не е бил регенериран от стъпка за предварителна обработка поради грешка. В резултат на това обаждането не беше това, което си мислех, че е - всъщност съдържаше едно цяло число като трети аргумент.

Благодаря за помощта на всички.

person Chris Whittleston    schedule 01.04.2014