易截截图软件、单文件、免安装、纯绿色、仅160KB

C++中extern “C”含义深层探索 [转]



1.
引言
  C++
语言的创建初衷是“a better C”
,但是这并不意味着C++
中类似C
语言的全局变量和函数所采用的编译和连接方式与C
语言完全相同。作 为一种欲与C
兼容的语言,C++
保留了一部分过程式语言的特点(被世人称为“
不彻底地面向对象”
),因而它可以定义不属于任何类的全局变量和函数。但 是,C++
毕竟是一种面向对象的程序设计语言,为了支持函数的重载,C++
对全局函数的处理方式与C
有明显的不同。
2.
从标准头文件说起
  某企业曾经给出如下的一道面试题:
  面试题
  为什么标准头文件都有类似以下的结构? 
#ifndef __INCvxWorksh
#define __INCvxWorksh 
#ifdef __cplusplus
extern "C" {
#endif 
/*...*/ 
#ifdef __cplusplus
}
#endif 
#endif /* __INCvxWorksh */
  分析
  显然,头文件中的编译宏“#ifndef __INCvxWorksh
、#define __INCvxWorksh
、#endif” 
的作用是防止该头文件被重复引用。
  那么
#ifdef __cplusplus
extern "C" {
#endif 
#ifdef __cplusplus
}
#endif 
  的作用又是什么呢?我们将在下文一一道来。
  
3.
深层揭密extern "C"
  extern "C" 
包含双重含义,从字面上即可得到:首先,被它修饰的目标是“extern”
的;其次,被它修饰的目标是“C”
的。让我们来详细解读这两重含义。
  被extern "C"
限定的函数或变量是extern
类型的;
  extern
是C/C++
语言中表明函数和全局变量作用范围(可见性)的关键字,该关键字告诉编译器,其声明的函数和变量可以在本模块或其它模块中使用。记住,下列语句:
  extern int a;
  仅仅是一个变量的声明,其并不是在定义变量a
,并未为a
分配内存空间。变量a
在所有模块中作为一种全局变量只能被定义一次,否则会出现连接错误。
  通常,在模块的头文件中对本模块提供给其它模块引用的函数和全局变量以关键字extern
声明。例如,如果模块B
欲引用该模块A
中定义的全局变量和函 数时只需包含模块A
的头文件即可。这样,模块B
中调用模块A
中的函数时,在编译阶段,模块B
虽然找不到


相关文档:

航空公司管理系统(VC++ 与SQL 2005)

系统环境:Windows 7
软件环境:Visual C++ 2008 SP1 +SQL Server 2005
本次目的:编写一个航空管理系统
      这是数据库课程设计的成果,虽然成绩不佳,但是作为我用VC++ 以来编写的最大程序还是传到网上,以供参考。用VC++ 做数据库设计并不容易,但也不是不可能。以下是我的程序界面,后面 ......

用C写的3D迷宫

          Boss说,要看OpenGL,看了快一个月,总算出了个像样的东西,用C写了个3D迷宫,
虽然只有350行
       代码,不过边学边写,足足写了一周时间,还是小有成就感的,活活活!
         &n ......

c 函数指针

c 函数指针 
以前什么函数指针,指针函数仅仅是概念上的理解,最近写个程序有这么个需求,其实也不是有这么个需求,而是这样写可以省去很多事....search了下,找到一篇好文
函数指针是什么?
    先来看函数调用是怎么回事。一个函数占用一段连续内存。当调用一个函数时,实际上是跳转到函数入口地址,执 ......

在windows下通过VC6.0第一次用C调用SQLite

1. 下载SQLitewindows版
我们可以从下列网站下载sqlite的windows版。
http://www.sqlite.com.cn/bbs/topicdisp.asp?tid=182&topage=1#gotolast
下载这个三个文件:
SQLite 3.3.7 下载
windows版
sqlite-3_3_7.zip      这个是SQLite的windows可执行文件
sqlitedll-3_3_7.zip 这个 ......

深入理解C/C++函数指针

转:http://school.ogdev.net/ArticleShow.asp?categoryid=10&id=6019
函数指针数组的妙用
笔者在开发某软件过程中遇到这样一个问题,前级模块传给我二进制数据,输入参数为 char* buffer和 int length,buffer是数据的首地址,length表示这批数据的长度。数据的特点是:长度不定,类型不定,由第一个字节(buffer[0] ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号