iOS 之 OBJECTC 调用C、OBJECTC调用C++

来源:互联网 发布:三菱伺服选型软件 编辑:程序博客网 时间:2024/06/10 07:50

iOS 平台软件开发使用 OBJECTC 会经常使用 C 或 C++ 目的主要:

1. 复用之前成熟的代码 

2. 复用开源项目代码 毕竟开源成熟的C/C++ 很多

3. 像STL非常方便开发的标准库 也习惯了,当然也想复用

4. 总之,每种情况下就想用C/C++ 代码


有以下情况混合

1. OBJECTC 调用  C 

这是 OBJECTC 的天生所在,xcode本身就支持 ,记住 C 必须是 C 函数,且文件必须是.C,如果文件是.CPP 则必须加上 "extern C"

注意:

调用C++ 的函数,不能再.h中声明,加 “extern"C"”也一样,因为OBJECTC 不识别,OBJECTC 认为是C范式,而.CPP则是 C++范式,

函数名生成贵州不一样,导致找不到函数。

正确做法:

在.CPP 中 实现 ,.H啥也不要做

extern "C"void Test()

{

    printf("===========Test OBJECTC CALL CPP====!\n");

}


再在 .m 声明

extern  void Test();


然后再任意OBJECTC 类中得函数中 调用 

Test()


2.OBJECTC 调用  C++ 

 首先必须把.m 改为 .mm 

  C++ 的文件不用说了后缀, 然后再.mm 里 跟正常调用C++ 使用 一样 ,函数直接调用,对象直接new,记得delete

  可以在.mm 正常使用 C++ 一切语法

如使用STL 

#include <string>

using namespace std;

class MyTest

{

public:

    MyTest();

    void Print();

};


MyTest::MyTest()

{

    

}

void MyTest::Print()

{

    fprintf("MyTest::Print!\n");

}


然后可以在任意OBJECTC类中得函数调用

    string str = "i love you ";

    NSLog(@"%s",str.c_str());

    MyTest* pTest = new MyTest;

    pTest->Print();


3.C++ 调用 OBJECTC (这种情况少见)

   首先必须把.m 改为 .mm ,且 C++ 函数 或 类 必须也再 .mm文件 声明 和 实现。

在.mm 文件中

class MyTest

{

public:

    MyTest();

    void Print();

};


MyTest::MyTest()

{

    

}

void MyTest::Print()

{

    NSLog(@"MyTest::Print");

}




0 0
原创粉丝点击