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

extern C 的作用

extern "C" 是 C++ 编译器支持的一种链接指示符(linkage directive),它表示由其声明的函数使用 C 语言的方式编译和链接。
C 和 C++ 对函数编译后产生的符号名是不一样的。假设一个函数的原型为:
void foo(int x, int y);
由 C 编译器编译后产生的符号名为 _foo,而 C++ 由于支持重载的需要,编译后的符号名为 _foo_int_int 。当该函数由 extern "C" 修饰后,C++ 编译器会按 C 的规则把它编译成 _foo。
extern "C" 的用法有两种格式:
单一语句形式的链接指示符:
extern "C" void foo(int, int);
复合语句形式的链接指示符:
extern "C" {
void foo(int, int);
void bar(int, int);
}
extern "C" 典型的用法是类似下面的格式包含在一个头文件中:
#ifdef __cplusplus
extern “C” {
#endif
void fun(void);
… …
#ifdef __cplusplus
}
#endif
这样声明的头文件有以下特点:
1. 能同时支持 C 或 C++ 编译器。(C 编译器不支持 extern "C" 符号,所以由 __cplusplus 宏保护)
2. 头文件中声明的函数都按照 C 的方式编译和链接。
由上面两个特点可以保证使用该头文件的 C 或 C++ 程序都统一按照 C 的方式找到编译后的函数符号,而无论这个函数之前是由 C 或 C++ 编译的。
使用例子
Linux 中所有的系统头文件、标准 C 头文件的开头和结尾部分都会分别包含 __BEGIN_DECLS 和 __END_DECLS 两个宏。这两个宏是在 sys/cdefs.h 中定义的,系统标准头文件一般都会通过 features.h 间接包含。下面是这两个宏的定义:
/* C++ needs to know that types and declarations are C, not C++.  */
#ifdef  __cplusplus
# define __BEGIN_DECLS  extern "C" {
# define __END_DECLS    }
#else
# define __BEGIN_DECLS
# define __END_DECLS
#endif
只要能理解前面的范例头文件,就能明白系统头文件要这样设计的意图了:即能让 C++ 程序按照 C 的方式链接和使用 C 函数库。
同样的使用原理还可以在 glib 库中看到。所有的 glib 头文件都会包含一对  G_BEGIN_DECLS
和 G_END_DECLS
宏,它们是在 glib/gmacros.h 中定义的。这样 glib 库也能被 C++ 程序使用。


相关文档:

C 的开始

    C 的开始
 
    2010年2月10日,
    开始阅读家里有关"C语言"的各种资料。
    使用 TurboC2.0,偶尔可能也会用到 Microsoft Visual C++ 6.0。 ......

C 语言编程————经验之谈

1、C语言的项目内存管理很让人头疼,自始至终你要明白哪些内存应该要释放,哪些到最后才能释放,不然的话,就会出现一些堆被破坏的错误
2、每写一个函数一定要记得写它的测试程序,不管那个函数简单的还是复杂,不然的话,到最后会忙死你,有时还会犯一些低级的错误。这个教训我就犯过,写了一大堆Utility工具函数库,一个 ......

系统设计 B/S结构和C/S结构

B/S结构(Browser/Server结构)结构即浏览器和服务器结构。它是随着Internet技术的兴起,对C/S结构的一种变化或者改进的结构。在这种结构下,用户工作界面是通过WWW浏览器来实现,极少部分事务逻辑在前端(Browser)实现,但是主要事务逻辑在服务器端(Server)实现,形成所谓三层3-tier结构。这样就大大简化了客户端电脑载 ......

C#中C/C++程序员注意问题

 1、C/C++程序员请注意,不能在case语句不为空时“向下执行”。
  2、值类型和引用类型之间的区别:C#的基本类型(int,char等)都是值类型,是在栈中创建的。而对象是引用类型,创建于堆中,需要使用关键字new。
  3、在C#中通过实例访问静态方法或成员变量是不合法的,会生成编译器错误。但是我们可以 ......

C 运行时库 /MT /MTD /MD /MDD

转载自:http://www.cnblogs.com/eddyshn/archive/2009/11/23/1608823.html
 
 
VC编译选项 多线程(/MT)
多线程调试(/MTd)
多线程 DLL (/MD)
多线程调试 DLL (/MDd)
C 运行时库                     ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号