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

C++与C进行相互函数调用,extern关键词的妙用

   extern除了能够用于声明变量,已经在外部被定义,不用重新定义和分配内存空间,还可以在C++与C进行相互函数调用方面会有很大的用处。
   首先,我们来看一下,为什么C++和C语言不能相互进行函数调用:
   编写如下的源文件:
   int func(int i)
{
return 1;
}
   分别存为test.cc,test.c,分别进行编译生成object文件:
   g++ -c test.cc -o testcc
gcc -c test.c -o testc
   使用nm命令查看生成的object文件的不同在哪个地方:
   nm testcc
00000000 T _Z4funci
U __gxx_personality_v0
nm testc
00000000 T func
   看出来了吧,C++编译器把参数信息编译后放到了函数的对象名字里面(为了实现多态),所以不能互相直接调用。
   知道了原因,解决的办法自然就有了,只要告诉链接程序,你链接的object的命名方式,它就会帮你做不一样的查找,从而找到C或者C++里面的函数了。
   比如:
   要让C++能够调用C的函数:
   main.cc
   extern "C"
{
int func(int i);
}
int main(void)
{
func(1);
}
   进行编译链接:
   g++ main.cc test.c
   要让C能够调用C++的函数,稍微有些不同:
   main.c:
   extern int func(int i);
int main(void)
{
func(1);
}
   需要修改test.cc的源文件:
   extern "C"
{
int func(int i);
}
int func(int i)
{
return 1;
}
   就可以了


相关文档:

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

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

华为C/C++笔试题(附答案)

http://www.teecool.com/post/2007081104.html
内容摘要:1.写出判断ABCD四个表达式的是否正确, 若正确, 写出经过表达式中 a的值(3分)
int a = 4;
(A)a += (a++); (B) a += (++a) ;(C) (a++) += a;(D) (++a) += (a++);
关键词:C语言面试题  C++面试题  华为面试题  
本文地址:http:// ......

Decrease the size of C:\Windows\Installer

http://social.msdn.microsoft.com/Forums/en/sqltools/thread/07db294a-79e5-4a5a-916c-6a51e44a5aa4
http://www.pcreview.co.uk/forums/thread-211705.php
Download "MsiZap.exe" from http://support.microsoft.com/default.aspx?scid=kb;en-us;290301 ......

C/C++数组名与指针区别深层探索

C/C++数组名与指针区别深层探索
 
作者:宋宝华 e-mail:21cnbao_AT_21cn.com [AT -> @]
1. 引言
指针是C/C++语言的特色,而数组名与指针有太多的相似,甚至很多时候,数组名可以作为指针使用。于是乎,很多
程序设计者就被搞糊涂了。而许多的大学老师,他们在C 语言的教学过程中也错误得给学生讲解:“数 ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号