Non-optional actual argument?

Non-optional actual argument?

Does anybody know what this compilation error message mean:

Error: A non-optional actual argument must be present when invoking a procedure with an explicit interface. [Y3]
CALL ARC(FI, P, D1, D2, D3)

I have no Y3 throughout the whole program.

5 posts / 0 new
Last post
For more complete information about compiler optimizations, see our Optimization Notice.

The subroutine ARC was defined with an interface including the formal argument called Y3, probably the sixth argument, which you didn't specify when you made the call to ARC in your program. Make sure your actual argument and formal argument lists match.


Thank you James. I know now. The reason was that the ARC is a (reserved) Fortran graphics function which looks like this:

result = ARC (x1, y1, x2, y2, x3, y3, x4, y4)

I have to change my subroutine's name.

There are no reserved names in Fortran. My guess is that you had a USE DFLIB, but did not have an explicit interface for your routine ARC. The best solution is to use an ONLY clause on the USE DFLIB to import only those names you are using, or to use a renaming clause to rename DFLIB's ARC to something else. You should then add an explicit interface for your ARC, though that is not strictly required.

You should not change the name of your routine.


Retired 12/31/2016

Thank you Steve. Yes, there is a USE DFLIB there and I could guess the same thing myself too, because I had the same call to ARC in another routine where I didn't get any compile time error message. But I did change the name of the routine anyway, because many other people here, now or in the future, are going to use this routine and perhaps together with DFLIB, and they are going to get the same error without knowing the reason, which means several lost hours.

Leave a Comment

Please sign in to add a comment. Not a member? Join today