c/c++/asm 混合编程
c/c++ 混合编程
c/c++/asm 混合编程
C语言不支持函数重载,编译不通过,其出错信息为:[Error] :conflicting types for '函数名'。
C++调用C:
一般extern 语句作用:
对于规模较大的程序,往往分成多个模块进行编写。对所有模块共同使用的全局变量和函数,如果在所有的模块中都定义,连接时将会出错。
解决方案:只在一个模块中定义(如int x;),在其他模块中用extern语句声明(extern int x;)这是一个外来的变量。
extern语句还可用于前向声明。如先使用后定义。
extern “C”的作用:
告诉编译器此语句块按照c语言的特性去编译。类中的重载不影响。类外无法实现函数重载。c++文件调用c文件中的变量和函数时,需要此语句。c语言不支持此用法。
首先看看C++中对类似C的函数是怎样编译的。
作为一种面向对象的语言,C++支持函数重载,而过程式语言C则不支持。函数被C++编译后在符号库中的名字与C语言的不同。例如,假设某个函数的原型为:
void foo( int x, int y );
该函数被C编译器编译后在.obj库文件中的名字为_foo,而C++编译器则会产生像_foo_int_int之类的名字(不同的编译器可能生成的名字不同,但是都采用了相同的机制,生成的新名字称为“mangled name”)。_foo_int_int这样的名字包含了函数名、函数参数数量及类型信息,C++就是靠这种机制来实现函数重载的。
同样地,C++中的变量除支持局部变量外,还支持类成员变量和全局变量。用户所编写程序的类成员变量可能与全局变量同名,我们以"."来区分。而本质上,编译器在进行编译时,与函数的处理相似,也为类中的变量取了一个独一无二的名字,这个名字与用户程序中同名的全局变量名字不同。
调用命令行命令
system("pause");//程序执行到这里时,会暂停,作用为“Press any key to continue”。system相当于调用shell命令。shell命令是用户与操作系统内核的接口。
//c++调用C,以下是三个源文件
//c_file.h
void fun();
//c_file.c
#include"c_file.h"
#include
void fun(){
printf("hi");
}
//main.cpp
extern "C"{
extern void fun();//此句不能在extern"C" 外!
int main(){
fun();
return 0;
}
}
C调用C++
//cpp_file.h
#ifndef _c_h_
#define _c_h_
//以上防止头文件被重复包含
#ifdef __cplusplus
extern "C" {
#endif
class mclass{
private:
int a;
public:
mclass(int);
void show(float);
void show(int);//类中的重载不影响
};
void f_show();
//void f_show(int); 类外无法实现函数重载
#ifdef __cplusplus
}
#endif
#endif //这个endif是与首行条件编译配对
/*
__cplusplus是cpp中的自定义宏
extern "C":
告诉编译器此语句块按照c语言的特性去编译。
*/
//cpp_file.cpp
#include"cpp_file.h"
#include
using namespace std;
void mclass::show(float x){
cout<<"show(float) hi~ the value is:"<a=a;
}
/*
void f_show(int a){
cout<<"hi";
}*/
void f_show(){
mclass ob(3);
ob.show(float(3.3));
ob.show(3);
}
//cpp文件,什么改动都不需要
//main.c
extern void f_show();
//extern void f_show(int); c不支持重载
int main(){
// f_show(2);
f_show();
return 0;
}
/*输出为
show(float) hi~ the value is:3
show(int) hi~ the value is:3
*/
C++中嵌入汇编语句
//cpp mixed with asm.programming in vs2010
#include
using namespace std;
int asm_add(int,int);
int main(int argc, char *argv[])
{
cout<
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)