Pragma Export_Function (GNAT Reference Manual)

### 2.60 Pragma Export_Function ¶

Syntax:

    pragma Export_Function (
         [Internal         =>] LOCAL_NAME
      [, [External         =>] EXTERNAL_SYMBOL]
      [, [Parameter_Types  =>] PARAMETER_TYPES]
      [, [Result_Type      =>] result_SUBTYPE_MARK]
      [, [Mechanism        =>] MECHANISM]
      [, [Result_Mechanism =>] MECHANISM_NAME]);

    EXTERNAL_SYMBOL ::=
      IDENTIFIER
    | static_string_EXPRESSION
    | ""

    PARAMETER_TYPES ::=
      null
    | TYPE_DESIGNATOR {, TYPE_DESIGNATOR}

    TYPE_DESIGNATOR ::=
      subtype_NAME
    | subtype_Name ' Access

    MECHANISM ::=
      MECHANISM_NAME
    | (MECHANISM_ASSOCIATION {, MECHANISM_ASSOCIATION})

    MECHANISM_ASSOCIATION ::=
      [formal_parameter_NAME =>] MECHANISM_NAME

    MECHANISM_NAME ::= Value | Reference

Use this pragma to make a function externally callable and optionally provide information on mechanisms to be used for passing parameter and result values. We recommend, for the purposes of improving portability, this pragma always be used in conjunction with a separate pragma `Export`, which must precede the pragma `Export_Function`. GNAT does not require a separate pragma `Export`, but if none is present, `Convention Ada` is assumed, which is usually not what is wanted, so it is usually appropriate to use this pragma in conjunction with a `Export` or `Convention` pragma that specifies the desired foreign convention. Pragma `Export_Function` (and `Export`, if present) must appear in the same declarative region as the function to which they apply.

The `internal_name` must uniquely designate the function to which the pragma applies. If more than one function name exists of this name in the declarative part you must use the `Parameter_Types` and `Result_Type` parameters to achieve the required unique designation. The subtype_marks in these parameters must exactly match the subtypes in the corresponding function specification, using positional notation to match parameters with subtype marks. The form with an `'Access` attribute can be used to match an anonymous access parameter.

Special treatment is given if the EXTERNAL is an explicit null string or a static string expressions that evaluates to the null string. In this case, no external name is generated. This form still allows the specification of parameter mechanisms.