网站介绍词,宿迁网站建设与管理,教育类网站开发,乔拓云网站注册请记住以下几个简单守则#xff1a;
确定你的C和C编译器产出兼容的目标文件#xff08;object files#xff09;。将双方都使用的函数声明为extern “C”。如果可能#xff0c;尽量在C中撰写main。总是以delete删除new返回的内存#xff1b;总以free释放malloc返回的内存…请记住以下几个简单守则
确定你的C和C编译器产出兼容的目标文件object files。将双方都使用的函数声明为extern “C”。如果可能尽量在C中撰写main。总是以delete删除new返回的内存总以free释放malloc返回的内存。将两个语言间的“数据结构传递”限制于C所能了解的形式C structs如果内含非虚函数倒是不受此限。
Name Mangling名字重整
绝对不要重整以其他语言撰写的函数的名称——不论是CassemblerFORTRANLispForthCOBOL还是其他任何语言
要压抑name mangling必须使用C的extern “C”指令
extern C
void drawLine(int x1,int y1,int x2,int y2);extern “C”可以施行于一整组函数身上只要以花括号封住头尾范围即可
extern C
{void drawLine(int x1,int y1,int x2,int y2);void twiddleBits(unsigned char bits);void simulate(int iterations);...
}加入__cplusplus这个符号只针对C才有定义即用于C时含有extern “C”用于C时无
#ifdef __cplusplus
extern C
{
#endifvoid drawLine(int x1,int y1,int x2,int y2);void twiddleBits(unsigned char bits);void simulate(int iterations);...
#ifdef __cplusplus
}
#endif Statics的初始化
static class对象、全局对象、namespace内的对象以及文件范围内的对象其构造总是在main之前就获得执行这个过程称为static initialization通过static initialization产生出来的对象其析构必须在所谓的static destruction过程中被调用发生在main结束之后。
如果能够还是尽量在C中撰写main的好
extern C
int realMain(int argc,char* argv[]); //将C main重命名的realMainint main(int argc,char* argv[])以C语言完成此函数
{realMain(argc,argv);
}动态内存分配
程序的C部分使用new和delete程序的C部分则使用malloc和free唯一需要做的就是严密地区分开二者。
数据结构的兼容性
如果你的C和C编译器有着兼容的输出两个语言的函数便可以安全地交换对象指针、non-member函数指针、或是static函数指针。很自然的structs以及内建类型的变量也可以安全跨越C/C边界。
如果在C和C之间传递数据需要限定在C语言支持范围内。