Login | Register   
LinkedIn
Google+
Twitter
RSS Feed
Download our iPhone app
TODAY'S HEADLINES  |   ARTICLE ARCHIVE  |   FORUMS  |   TIP BANK
Browse DevX
Sign up for e-mail newsletters from DevX


Tip of the Day
Language: C++
Expertise: All
Jun 11, 1998

extern "C" linkage declaration

It is not uncommon for C++ code fragments to be called by non-C++ programs such as a C-based communication software, COBOL based TP monitors and the likes. However, global functions in C++ cannot be called by non-C++ programs since the function name is very different from the one supplied by the programmer. Why is this? By default, the C++ compiler uses a technique termed name mangling which incorporates the function name with its signature (list of arguments) in order to create a unique name for it, even in case of overloading (this technique is used both for external function and class member functions).

//the following global functions have distinct names generated by the compiler void f(int); //x__f_i this may be the name generated by the compiler for this f() void f(long, char* ); //x__f_pc this may be the name generated by the compiler for this f()

In order to enforce the compiler to avoid name mangling, a global function has to be declared as extern "C":

extern "C" void f(int); //now the generated name is identical to the one given by the programmer: f

Mind, however, that a function declared as extern "C" cannot be overloaded, and that extern "C" declaration can only be applied to global functions.

Danny Kalev
 
Comment and Contribute

 

 

 

 

 


(Maximum characters: 1200). You have 1200 characters left.

 

 

Sitemap
Thanks for your registration, follow us on our social networks to keep up-to-date