Language linkage

IBM extension C onlyOn an IBM® i system, language linkage is available for C through the use of #pragma argument. See chapter "ILE C/C++ Pragmas" in ILE C/C++ Compiler Reference and chapter "ILE Calling Conventions" in ILE C/C++ Programmer’s Guide for more information.

C++ Linkage between C++ and non-C++ code fragments is called language linkage. All function types, function names, and variable names have a language linkage, which by default is C++.

You can link C++ object modules to object modules produced using other source languages such as C by using a linkage specification.

Read syntax diagramSkip visual syntax diagramLinkage specification syntax
 
>>-extern--string_literal--+-declaration---------------+-------><
                           |    .-----------------.    |
                           |    V                 |    |
                           '-{----+-------------+-+--}-'
                                  '-declaration-'
 

The string_literal is used to specify the linkage associated with a particular function. String literals used in linkage specifications should be considered as case-sensitive. All platforms support the following values for string_literal:

"C++"
Unless otherwise specified, objects and functions have this default linkage specification.
"C"
Indicates linkage to a C procedure

IBM extensionSee Chapter 25 "Working with Multi-Language Applications in the ILE C/C++ Programmer’s Guide for additional language linkages supported by ILE C++.

Calling shared libraries that were written before C++ needed to be taken into account requires the #include directive to be within an extern "C" {} declaration.

extern "C" {
#include "shared.h"
}

The following example shows a C printing function that is called from C++.

//  in C++ program
extern "C" int displayfoo(const char *);
int main() {
    return displayfoo("hello");
}

/*  in C program     */
#include <stdio.h>
extern int displayfoo(const char * str) {
    while (*str) {
       putchar(*str);
       putchar(' ');
       ++str;
    }
    putchar('\n');
} 


[ Top of Page | Previous Page | Next Page | Contents | Index ]