Mac终端创建C语言文件并转换成C++

最近在研究block的底层实现方式,查看了大量的文章都说需要先把block代码转换成C++。然后在网上搜了一些资料,终于完成了代码的转换。下面就说一下代码转换的实现过程:

  • 首先在桌面创建一个文件夹c:


    Mac终端创建C语言文件并转换成C++_第1张图片
  • 然后打开终端:


    Mac终端创建C语言文件并转换成C++_第2张图片
  • ls查看当前文件内容,并cd到刚创建的c文件夹下:

bogon:~ $ ls
AboutBall       ControllerSlide     Library
Applications        Desktop         Movies
AwesomeProject      Documents       Music
CAShapeLayerAnimation   Downloads       Pictures
bogon:~ $ cd Desktop/c
bogon:c $ ls
  • 在文件夹中创建一个math.c的文件:
bogon:c $ touch math.c

执行完成之后,c文件夹中会生成一个存放C语言的文件math.c,如下图:


Mac终端创建C语言文件并转换成C++_第3张图片
  • 用Vim编辑器编辑math.c文件:
bogon:c $ vim math.c
  • 进去之后按下i进入插入编辑模式,放入要创建的C语言代码,按ESC保存,按:wq退出:
    C语言示例代码:
#include “stdio.h”
#include “math.h”
int main()
{
   ^{ };
}
  • 最后执行clang -rewrite-objc math.c将math.h中的C转换成C++代码:
bogon:c $ clang -rewrite-objc math.c

生成的math.cpp就是C++:


Mac终端创建C语言文件并转换成C++_第4张图片

附上一段转换后的C++代码:

struct __main_block_impl_0 {
  struct __block_impl impl;
  struct __main_block_desc_0* Desc;
  __main_block_impl_0(void *fp, struct __main_block_desc_0 *desc, int flags=0) {
    impl.isa = &_NSConcreteStackBlock;
    impl.Flags = flags;
    impl.FuncPtr = fp;
    Desc = desc;
  }
};
static void __main_block_func_0(struct __main_block_impl_0 *__cself) {
 }

static struct __main_block_desc_0 {
  size_t reserved;
  size_t Block_size;
} __main_block_desc_0_DATA = { 0, sizeof(struct __main_block_impl_0)};
int main()
{
   ((void (*)())&__main_block_impl_0((void *)__main_block_func_0, &__main_block_desc_0_DATA));
}
static struct IMAGE_INFO { unsigned version; unsigned flag; } _OBJC_IMAGE_INFO = { 0, 2 };

你可能感兴趣的:(Mac终端创建C语言文件并转换成C++)