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

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/doitsjz/article/details/50753269

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");

}




阅读更多
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页