OC代码转C++代码的生成

简介: OC代码转C++代码的生成

使用clang编译器将Objective-C代码编译成C语言代码, 并生成在一个.cpp的 C++文件中。具体的命令行是:

$ cd 当前文件夹 
$ clang -rewrite-objc ViewController.m


可能会遇到一个错误就是如下:


image.png

解决办法是将之前执行的命令替换成为:

$ clang -x objective-c -rewrite-objc -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk ViewController.m

这时, 你会发现, 你的文件夹中多了一个.cpp的文件, 证明解决了这个问题。


优化


  • 一、如果你觉得这个命令很繁琐不易记, 你可以采用 alias来起一个别名来代替这个命令。
  • 1.打开终端, 键入命令 vim ~/.bash_profile
  • 2.在vim界面输入i进入编辑编辑状态并且键入:jkrewriteoc是我自己起的
alias jkrewriteoc='clang -x objective-c -rewrite-objc -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk'
  • 3.键入完毕后,点击Esc退出编辑,再按 Shift+: ,最后再按:wq保存并退出vim文件并保存
  • 4.键入命令source ~/.bash_profile(必须要执行这句)


  • 二、优化后的使用


$ cd 当前文件夹 
$ jkrewriteoc ViewController.m
  • 解释:优化后:也就是起别名,


jkrewriteoc ViewController.m
  • 上下两句等同


$ clang -x objective-c -rewrite-objc -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk ViewController.m
  • 结果


image.png

image.png

  • 补充:如果vim编辑器出现 E325: ATTENTION,终端执行下面的代码就会好了
    rm -f ~/.bash_profile.swp


  • 三、遇到下面问题后的处理办法 __weak问题解决


  • 在使用clang转换OC为C++代码时,可能会遇到以下问题
    cannot create __weak reference in file using manual reference
  • 解决方案:支持ARC、指定运行时系统版本,比如,在-rewrite-objc 后面添加 -fobjc-arc -fobjc-runtime=ios-8.0.0


  • 出现问题前如下:


$ clang -x objective-c -rewrite-objc -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk ViewController.m
  • 添加完 -fobjc-arc -fobjc-runtime=ios-8.0.0如下


$ clang -x objective-c -rewrite-objc -fobjc-arc -fobjc-runtime=ios-8.0.0 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk ViewController.m


目录
相关文章
|
1月前
|
自然语言处理 算法 前端开发
C++与Doxygen:精通代码文档化之道
C++与Doxygen:精通代码文档化之道
49 0
|
1月前
|
Linux 编译器 程序员
【Linux 调试秘籍】深入探索 C++:运行时获取堆栈信息和源代码行数的终极指南
【Linux 调试秘籍】深入探索 C++:运行时获取堆栈信息和源代码行数的终极指南
68 0
|
2天前
|
设计模式 编译器 数据安全/隐私保护
C++ 多级继承与多重继承:代码组织与灵活性的平衡
C++的多级和多重继承允许类从多个基类继承,促进代码重用和组织。优点包括代码效率和灵活性,但复杂性、菱形继承问题(导致命名冲突和歧义)以及对基类修改的脆弱性是潜在缺点。建议使用接口继承或组合来避免菱形继承。访问控制规则遵循公有、私有和受保护继承的原则。在使用这些继承形式时,需谨慎权衡优缺点。
12 1
|
3天前
|
设计模式 存储 Java
C++从入门到精通:3.5设计模式——提升代码可维护性与可扩展性的关键
C++从入门到精通:3.5设计模式——提升代码可维护性与可扩展性的关键
|
4天前
|
C++
【C++】在使用代码组装URL时,一定要注意的坑......
【C++】在使用代码组装URL时,一定要注意的坑......
9 0
|
25天前
|
C语言 C++ 容器
C调用C++代码
C调用C++代码
12 1
|
1月前
|
算法 程序员 C语言
C++设计哲学:构建高效和灵活代码的艺术
C++设计哲学:构建高效和灵活代码的艺术
60 1
|
1月前
|
安全 NoSQL 程序员
【年度征文 健壮代码 心得体会】 如何编写健壮的C++代码
【年度征文 健壮代码 心得体会】 如何编写健壮的C++代码
53 0
|
1月前
|
存储 缓存 安全
【C/C++ 项目优化实战】 分享几种基础且高效的策略优化和提升代码性能
【C/C++ 项目优化实战】 分享几种基础且高效的策略优化和提升代码性能
65 0
|
1月前
|
缓存 测试技术 开发工具
内存泄漏检测工具Valgrind:C++代码问题检测的利器(二)
内存泄漏检测工具Valgrind:C++代码问题检测的利器
35 0