精华区 [关闭][返回]

当前位置:网易精华区>>讨论区精华>>编程开发>>C/C++>>C、C++语言基础>>extern "c"有什么用

主题:extern "c"有什么用
发信人: benben1()
整理人: wenbobo(2002-12-06 22:08:55), 站内信件
我看一个程序时发现虽然函数用extern "C"定义,但是却在本文件内实现,
这有什么用?
Thank you!

--
人生得意须尽欢,
末使金樽空对月。

※ 来源:.月光软件站 http://www.moon-soft.com.[FROM: 202.102.32.49]
发信人: j2 (笑情), 信区: C
标  题: Re: extern "C"有什么用处? 
发信站: 网易虚拟社区 (Tue May 25 10:14:56 1999), 站内信件

【 在 benben1 (天刀) 的大作中提到: 】
: 我看一个程序时发现虽然函数用extern "C"定义,但是却在本文件内实现,
: 这有什么用?
: Thank you!

It used to appear in DLL's code. Because DLL should "export"
some symbols(include variables and functions ), so extern "C"
declare the standard call method for it.

--
空山新雨后,天气晚来秋。
明月松间照,清泉石上流。
竹喧归浣女,莲动下渔舟。
随意春芳歇,王孙自可留。

※ 来源:.月光软件站 http://www.moon-soft.com.[FROM: 202.109.40.50]
发信人: ken_qian (<marquee>杀意隆), 信区: C
标  题: Re: extern "C"有什么用处? 
发信站: 网易虚拟社区 (Tue May 25 12:26:55 1999), 站内信件

【 在 benben1 (天刀) 的大作中提到: 】
: 我看一个程序时发现虽然函数用extern "C"定义,但是却在本文件内实现,
: 这有什么用?
: Thank you!

原因如下:
当我们想从C++中调用C的库时,不能仅仅说明
一个外部函数,因为调用C函数的编译代码和调
用C++函数的编译代码是不同的。如果你仅说明
一个外部函数, C++编译器假定它是C++的函数
编译成功了,但当你连接时会发现很可爱的错误
(笑)。
解决的方法就是指定它为C函数:
extern "c" 函数描述
指定一群函数的话:
extern "C"{
n个函数描述
}
如果想C和C++混用的话:
#ifdef _cplusplus
extern "C"{
#endif
n个函数描述
#ifdef _cplusplus
}
#endif

另外到底有没有人当斑竹?
没人当我申请了。

Ken
13:19

--
杀意隆在你的耳边轻声说:“我要用你的血把月亮染红!”
你的眼前一黑,接着什么也不知道了......

※ 来源:.月光软件站 http://www.moon-soft.com.[FROM: 210.175.11.131]
发信人: benben1 (天刀), 信区: C
标  题: Re: extern "C"有什么用处? 
发信站: 网易虚拟社区 (Tue May 25 14:50:30 1999), 转信

【 在 ken_qian (<marquee>杀意隆) 的大作中提到: 】
: 【 在 benben1 (天刀) 的大作中提到: 】
: : 我看一个程序时发现虽然函数用extern "C"定义,但是却在本文件内实现,
: : 这有什么用?
: : Thank you!
:    .......
But,in general,the function defined by "extern" don't implement
 in same file. If in same file,what they can get.
请解释一下C编辑器如何处理这种情况。



I support you!

--
人生得意须尽欢,
末使金樽空对月。

※ 来源:.月光软件站 http://www.moon-soft.com.[FROM: 202.102.32.49]
发信人: ken_qian (<marquee>杀意隆), 信区: C
标  题: Re: extern "C"有什么用处? 
发信站: 网易虚拟社区 (Tue May 25 16:14:36 1999), 站内信件

【 在 benben1 (天刀) 的大作中提到: 】
: 【 在 ken_qian (<marquee>杀意隆) 的大作中提到: 】
: : 【 在 benben1 (天刀) 的大作中提到: 】
: :    .......
: But,in general,the function defined by "extern" don't implement
:    .......

Like this:

#ifdef _cplusplus
       #define EXTERN_C extern "C"
else
       #define EXTERN_C extern
#endif
#ifdef _cplusplus
       extern "C"{
#endif
       EXTERN_C BOOL FindLover(CHuman *human);
       .............
#ifdef _cplusplus
       }
#endif 

实际上 extern "C" 就是告诉C++的编译器:“大哥我是C的函数,
别搞错了!”

 

--
杀意隆目中神光咋现,一向清澄的眼眸中竟闪现出三分歹毒,四分杀意。

※ 来源:.月光软件站 http://www.moon-soft.com.[FROM: 210.175.11.131]
发信人: magicfat (魔法胖子), 信区: C
标  题: Re: extern "C"有什么用处? 
发信站: 网易 BBS (Wed May 26 05:26:43 1999), 转信

【 在 ken_qian (<marquee>杀意隆) 的大作中提到: 】
: 另外到底有没有人当斑竹?
: 没人当我申请了。

该出手便出手吧。我实在是连网易太慢,还经常被踢,当版主也是耽误事。

--
◆  他号令便号令好了,又何必安静?

※ 来源:.网易 BBS bbs.netease.com.[FROM: surf1128.pompano.net]
发信人: zelor (张作乐), 信区: C
标  题: Re: extern "C"有什么用处? 
发信站: 网易虚拟社区 (Wed May 26 19:36:59 1999), 站内信件

   两位随便谁都可以啦,只要有斑竹就行。
【 在 magicfat (魔法胖子) 的大作中提到: 】
: 【 在 ken_qian (<marquee>杀意隆) 的大作中提到: 】
: : 另外到底有没有人当斑竹?
: : 没人当我申请了。
: 该出手便出手吧。我实在是连网易太慢,还经常被踢,当版主也是耽误事。
:    .......


--
世上惟三件事可以掀起我的激情:
 
爱情,
艺术,
编程。

※ 来源:.月光软件站 http://www.moon-soft.com.[FROM: 202.103.47.185]

[关闭][返回]