Skip to content

Do C callbacks require extern "C"? #78

Open
@ivan-pi

Description

@ivan-pi

Assuming the C interface of MINPACK is used in C++ program, should the callback types also have C linkage specified?

extern "C" {                  // <-- do we need this?
typedef void (*minpack_func)(
    int /* n */,
    const double* /* x */,
    double* /* fvec */,
    int* /* iflag */,
    void* /* udata */);
}                             // <-- do we need this?

The last section of this Oracle document, Pointers to Functions as Function Parameters, appears to say that unless the linkage is specified, the following declaration

MINPACK_EXTERN void MINPACK_CALL
minpack_hybrd(
    minpack_func /* fcn */,
    int /* n */,
    double* /* x */,
    double* /* fvec */,
    ...);

assumes the fcn argument will have C++ linkage and not C, like expected by the Fortran interfaces (definitions).

Typically, C and C++ compilers of the same vendor will be binary compatible when it comes to function linkage, but in principle they don't have to be.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions