培训网站建设机构,2019做seo网站,多媒体展厅,许昌网站建设费用由于C编译器需要支持函数的重载#xff0c;会改变函数的名称#xff0c;因此dll的导出函数通常是标准C定义的。这就使得C和C的互相调用变得很常见。但是有时可能又会直接用C来调用#xff0c;不想重新写代码#xff0c;让标准C编写的dll函数定义在C和C编译器下都能编译通过… 由于C编译器需要支持函数的重载会改变函数的名称因此dll的导出函数通常是标准C定义的。这就使得C和C的互相调用变得很常见。但是有时可能又会直接用C来调用不想重新写代码让标准C编写的dll函数定义在C和C编译器下都能编译通过通常会使用以下的格式这个格式在很多成熟的代码中很常见 #if defined(__cplusplus)//只有c编译器才有这个宏定义。 extern C { #endif // 在这里写标准C程序例如dll导出函数的定义 #ifdef __cplusplus } #endif 下面解释一下上面的代码 首先__cplusplus是C编译器内部定义的宏如果使用的C编译器__cplusplus宏不会被定义。它可以作为区分使用的是C编译器还是C编译器的标志。在标准C中C代码直接写就可以了。而在C中需要加extern C或包含在extern C块中。 由于标准C是不支持extern C的会产生变异错误所以使用预编译指令通过__cplusplus来判断只有在使用C编译器的时候才定义extern C。 意思是说如果是C程序就使用extern C{而这个东东是指在下面的函数不使用的C的名字修饰而是用C的 extern c 函数描述 指定它为C函数 extern C表示编译生成的内部符号名使用C约定 C支持函数重载而C不支持两者的编译规则也不一样。函数被C编译后在符号库中的名字与C语言的不同。例如假设某个函数的原型为 void foo( int x, int y ); 该函数被C编译器编译后在符号库中的名字可能为_foo而C编译器则会产生像_foo_int_int之类的名字不同的编译器可能生成的名字不 同但是都采用了相同的机制生成的新名字称为“mangled name”。_foo_int_int这样的名字包含了函数名、函数参数数量及类型信息C就是靠这种机制来实现函数重载的。下面以例子说明如何 在C中使用C的函数 http://www.cnblogs.com/HappyXie/archive/2011/01/07/1929369.html转载于:https://www.cnblogs.com/azbane/p/8522625.html