#ifdef #ifndef extern "c"与头文件

转载 2007年09月26日 14:32:00

Remarks
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();

int main() {
   // Reference to i, defined above:
   extern int i;
}

void other() {
   // Address of global i assigned to pointer variable:
   static int *external_i = &i;

   // i will be 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:

  Copy Code
// specifying_linkage2.cpp
// compile with: /c
// 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;
 


Microsoft Specific

All Microsoft C standard include files use conditional compilation directives to detect C++ compilation. When a C++ compilation is detected, the prototypes are enclosed in an extern "C" directive as follows:

 
// Sample.h
#if defined(__cplusplus)
extern "C"
{
#endif

// Function declarations

#if defined(__cplusplus)
}
#endif
 

__cplusplus:
Predefined Macros
The compiler recognizes predefined ANSI C macros and the Microsoft C++ implementation provides several more.
the __cplusplus defined for C++ programs only.
 
头文件一般定义方式如下:
// MyHeaderFile.h
#ifndef  __MyHeaderFile__
#define  __MyHeaderFile__      // 方便管理头文件

#if defined(__cplusplus)
extern "C"
{
#endif

// Function declarations

#if defined(__cplusplus)
}
#endif
#endif  // __MyHeaderFile__ 

C++头文件之:#ifndef #define #endif ,#ifdef __cplusplus extern "C" { #endif,__declspec(dllimport)

#ifndef 在头文件中的作用 在一个大的软件工程里面,可能会有多个文件同时包含一个头文件,当这些文件编译链接成一个可执行文件时,就会出现大量“重定义”的错误。在头文件中实用#ifndef #def...

DSP头文件“#ifdef __cplusplus extern "C"

“#ifdef __cplusplus extern "C" { #endif”的定义看一些程序的时候老是有“#ifdef __cplusplusextern "C" {#endif”的定义,搞搞清楚...
  • Augusdi
  • Augusdi
  • 2011年03月30日 20:16
  • 1781

C/C++头文件中ifndef/define/endif 的作用

例如:要编写头文件test.h          在头文件开头写上两行:           #ifndef _TEST_H           #define _TEST_H//一...

c,c++里面,头文件里面的ifndef /define/endif的作用

今天和宿舍同学讨论一个小程序,发现有点地方不大懂······      是关于头文件里面的一些地方: 例如:要编写头文件test.h          在头文件开头写上两行: ...

c,c++里面,头文件里面的ifndef /define/endif的作用

转自:http://blog.renren.com/share/231327413/566439602 今天和宿舍同学讨论一个小程序,发现有点地方不大懂······      是关于头...

c,c++里面,头文件里面的ifndef /define/endif的作用

转自:http://blog.renren.com/share/231327413/566439602 今天和宿舍同学讨论一个小程序,发现有点地方不大懂······      是关...

C/C++预处理指令#define,#ifdef,#ifndef,#endif…

转载:C/C++预处理指令#define,#ifdef,#ifndef,#endif…这篇文章都是概念性知识,没有什么可分析,完全转载原作者,方便以后查询。工作中经常这样使用宏:1、 常常使用宏来调试...

C/C++指令#undef,#ifdef,#ifndef,#if的用法

http://edu.chinawuliu.com.cn/two/c/zh/100531.shtml #undef   #undef 是在后面打消以前界说的宏界说   该指令的形式为...

extern“c”在项目头文件中的使用

被extern "C"修饰的变量和函数是按照C语言方式编译和连接的。   未加extern “C”声明时的编译方式,C++中对类似C的函数是怎样编译的?   作为一种面向对象的语言,C...

头文件中extern C的用法

1.引言   C++语言的创建初衷是“a better C”,但是这并不意味着C++中类似C语言的全局变量和函数所采用的编译和连接方式与C语言完全相同。作为一种欲与C兼容的语言,C++保留了一部分过...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:#ifdef #ifndef extern "c"与头文件
举报原因:
原因补充:

(最多只允许输入30个字)