On an iSeries system, language linkage is available for C through the use of
#pragma argument. See chapter 3 "ILE C/C++ Pragmas" in
ILE C/C++ Compiler Reference and chapter 25 "ILE Calling
Conventions" in ILE C/C++ Programmer's Guide for more
information.
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. The syntax is:
>>-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
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'); }
Related References
(C) Copyright IBM Corporation 1992, 2006. All Rights Reserved.