Information
The topic you requested is included in another documentation set. For convenience, it's displayed below. Choose Switch to see the topic in its original location.

Using extern to Specify Linkage

Grammar

linkage-specification :
extern string-literal { declaration-listopt }
extern string-literal declaration
declaration-list :
declaration
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.

Example

// 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.

Example

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

Was this page helpful?
(1500 characters remaining)
Thank you for your feedback
Show:
© 2014 Microsoft