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;
}
就可以了
相关文档:
系统环境:Windows 7
软件环境:Visual C++ 2008 SP1 +SQL Server 2005
本次目的:编写一个航空管理系统
这是数据库课程设计的成果,虽然成绩不佳,但是作为我用VC++ 以来编写的最大程序还是传到网上,以供参考。用VC++ 做数据库设计并不容易,但也不是不可能。以下是我的程序界面,后面 ......
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:// ......
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++数组名与指针区别深层探索
作者:宋宝华 e-mail:21cnbao_AT_21cn.com [AT -> @]
1. 引言
指针是C/C++语言的特色,而数组名与指针有太多的相似,甚至很多时候,数组名可以作为指针使用。于是乎,很多
程序设计者就被搞糊涂了。而许多的大学老师,他们在C 语言的教学过程中也错误得给学生讲解:“数 ......