Was this page helpful?
Your feedback about this content is important. Let us know what you think.
Additional feedback?
1500 characters remaining
Export (0) Print
Expand All

Using extern to Specify Linkage


linkage-specification :
extern string-literal { declaration-listopt }
extern string-literal declaration
declaration-list :
declaration-list declaration

The extern keyword declares a variable or function and specifies that it has external linkage (its name is visible from files other than the one in which it's defined). When modifying a variable, extern specifies that the variable has static duration (it is allocated when the program begins and deallocated when the program ends). The variable or function may be defined in another source file, or later in the same file. Declarations of variables and functions at file scope are external by default.


// specifying_linkage1.cpp
int i = 1;
void other( void );
int main(){
   /* Reference to i, defined above: */
   extern int i;
void other( void ){
/* Address of global i assigned to pointer variable: */
   static int *external_i = &i;
/* i is redefined; global i no longer visible: */
   int i = 16;

In C++, when used with a string, extern specifies that the linkage conventions of another language are being used for the declarator(s). C functions and data can be accessed only if they are previously declared as having C linkage. However, they must be defined in a separately compiled translation unit.

Microsoft C++ supports the strings "C" and "C++" in the string-literal field. All of the standard include files use the extern "C" syntax to allow the run-time library functions to be used in C++ programs.


The following example shows alternative ways to declare names that have C linkage:

// specifying_linkage2.cpp

// Declare printf with C linkage.
extern "C" int printf( const char *fmt, ... );

//  Cause everything in the specified header files
//   to have C linkage.
extern "C"
   // add your #include statements here
   #include <stdio.h>

//  Declare the two functions ShowChar and GetChar
//   with C linkage.
extern "C"
    char ShowChar( char ch );
    char GetChar( void );

//  Define the two functions ShowChar and GetChar
//   with C linkage.
extern "C" char ShowChar( char ch )
    putchar( ch );
    return ch;

extern "C" char GetChar( void )
    char ch;

    ch = getchar();
    return ch;

// Declare a global variable, errno, with C linkage.
extern "C" int errno;

int main()

See Also

C++ Keywords | Linkage Specifications | The extern Storage-class Specifier | Behavior of Identifiers | Linkage

© 2015 Microsoft