c/c++/asm 混合编程

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:"
//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++中嵌入汇编语句

在 VS2010中通过。GCC暂不清楚。
只需把汇编语句写在__asm{}括号内即可,非常简单。
//cpp mixed with asm.programming in vs2010
#include 
using namespace std;
int asm_add(int,int);
int main(int argc, char *argv[])
{
	cout<

你可能感兴趣的:(C++)