Intel® Fortran Compiler Classic and Intel® Fortran Compiler Developer Guide and Reference

ID 767251
Date 6/24/2024
Public

A newer version of this document is available. Customers should click here to go to the newest version.

Document Table of Contents

iface

Specifies the default calling convention and argument-passing convention for an application.

Syntax

Linux:

None

Windows:

/iface:keyword

Arguments

keyword

Specifies the calling convention or the argument-passing convention. Possible values are:

default

Tells the compiler to use the default calling conventions.

cref

Tells the compiler to use calling conventions C, REFERENCE.

cvf

Tells the compiler to use calling conventions compatible with Compaq Visual Fortran*. This value is only available on Windows* systems.

[no]mixed_str_len_arg

Determines the argument-passing convention for hidden-length character arguments.

stdcall

Tells the compiler to use calling convention STDCALL.

stdref

Tells the compiler to use calling conventions STDCALL, REFERENCE.

Default

/iface:default

The default calling convention is used.

Description

This option specifies the default calling convention and argument-passing convention for an application.

The aspects of calling and argument passing controlled by this option are as follows:

  • The calling mechanism (C or STDCALL) is as follows:

    On IA-32 architecture: These mechanisms differ in how the stack register is adjusted when a procedure call returns.

    On Intel® 64 architecture: The only calling mechanism available is C; requests for the STDCALL mechanism are ignored.

  • The argument passing mechanism (by value or by reference)

  • Character-length argument passing (at the end of the argument list or after the argument address)

  • The case of external names (uppercase or lowercase)

  • The name decoration (prefix and suffix)

You can also use the ATTRIBUTES compiler directive to modify these conventions on an individual basis. Note that the effects of the ATTRIBUTES directive do not always match that of the iface option of the same name.

Option

Description

/iface:default

Tells the compiler to use the default calling conventions. These conventions are as follows:

  • The calling mechanism: C

  • The argument passing mechanism: by reference

  • Character-length argument passing: at end of argument list

  • The external name case: uppercase

  • The name decoration: Underscore prefix on IA-32 architecture, no prefix on Intel® 64 architecture; no suffix

/iface:cref

Tells the compiler to use the same conventions as /iface:default except that external names are lowercase.

/iface:cvf

Tells the compiler to use calling conventions compatible with Compaq Visual Fortran* and Microsoft Fortran PowerStation. This option is only available on Windows* systems. These conventions are as follows:

  • The calling mechanism: STDCALL on Windows* systems using IA-32 architecture

  • The argument passing mechanism: by reference

  • Character-length argument passing: following the argument address

  • The external name case: uppercase

  • The name decoration:

    ifort: Underscore prefix on IA-32 architecture, no prefix on Intel® 64 architecture. On Windows* systems using IA-32 architecture, @n suffix where n is the number of bytes to be removed from the stack on exit from the procedure. On other systems: no suffix.

    ifx: no prefix; no suffix

/iface:mixed_str_len_arg

Specifies argument-passing conventions for hidden-length character arguments. This option tells the compiler that the hidden length passed for a character argument is to be placed immediately after its corresponding character argument in the argument list.

This is the method used by Compaq Visual Fortran*. When porting mixed-language programs that pass character arguments, either this option must be specified correctly or the order of hidden length arguments must be changed in the source code. This option can be used in addition to other /iface options.

/iface:stdcall

Tells the compiler to use the following conventions:

  • The calling mechanism: STDCALL

  • The argument passing mechanism: by value

  • Character-length argument passing: at the end of the argument list

  • The external name case: uppercase

  • The name decoration:

    ifort: Underscore prefix on IA-32 architecture, no prefix on Intel® 64 architecture. On Windows* systems using IA-32 architecture, @n suffix where n is the number of bytes to be removed from the stack on exit from the procedure. No suffix on other systems.

    ifx: no prefix; no suffix

/iface:stdref

Tells the compiler to use the same conventions as /iface:stdcall except that argument passing is by reference.

CAUTION:

On Windows systems, if you specify option /iface:cref, it overrides the default for external names and causes them to be lowercase. It is as if you specified "!dir$ attributes c, reference" for the external name.

If you specify option /iface:cref and want external names to be uppercase, you must explicitly specify option /names:uppercase.

CAUTION:

On systems using IA-32 architecture, there must be agreement between the calling program and the called procedure as to which calling mechanism (C or STDCALL) is used, or unpredictable errors may occur. If you change the default mechanism to STDCALL, you must use the ATTRIBUTES DEFAULT directive to reset the calling conventions for any procedure that is:

  • Specified as a FINAL procedure for a derived type

  • Specified as a USEROPEN procedure in an OPEN statement

  • Referenced in a variable format expression

  • Specified as a comparison routine passed to the QSORT library routine from module IFPORT

  • Used as a dialog callback procedure with the IFLOGM module

  • Called from other contexts or languages that assume the C calling convention

Note that Visual Studio projects that are imported using the Extract Compaq Visual Fortran project items wizard have /iface:cvf applied automatically; this establishes STDCALL as the default convention.

IDE Equivalent

Visual Studio: External Procedures > Calling Convention (/iface:{cref|stdref|stdcall|cvf|default})

External Procedures > String Length Argument Passing (/iface:[no]mixed_str_len_arg)

Alternate Options

/iface:cvf

Linux: None

Windows: /Gm

/iface:mixed_str_len_arg

Linux: -mixed-str-len-arg

Windows: None

/iface:nomixed_str_len_arg

Linux: -nomixed-str-len-arg

Windows: None

/iface:stdcall

Linux: None

Windows: /Gz