美文网首页
在iOS开发中遇到C语言时的小细节(不断更新)

在iOS开发中遇到C语言时的小细节(不断更新)

作者: EdwardSelf | 来源:发表于2016-12-11 23:35 被阅读44次

    开发中遇到一些算法会用到c语言,在Xcode中与OC文件编译还是有些区别的,遇到一些小坑总结。

    1、在Xcode中创建c文件,如果想声明一个全局变量,且在外部调用,直接声明是不可以,可能会导致一个重复声明的问题,飘红一个“linker command failer with exit code 1”的错误。

    正确声明是在.h文件里用extern修饰,在c文件里声明。

    例如声明一个int型名为a的全局变量:

    在.h文件的#ifndef  #define  里声明 “extern int a”, 在.c文件里的头部声明 “int a”。

    2、byte的拼接

    如果把 0000 1111 的第一个1 和 0000 1101 的第一个和第二个1拼接起来(画粗和斜体)。

    Byte tmpA =0x0f; // 0000 1111

    Byte tmpB =0x0d; // 0000 1101

    Byte tmpC = (tmpA & 0x08) >>1;  //获取到 1 ,然后右移1位

    Byte tmpD = (tmpB &0x0C) >>2; //获取到11 ,然后右移2位。

    做个或运算,即取到了。 nTmp即是位拼接到的。

    Byte nTmp = tmpC | tmpD;

    3、//main.cpp

    int a=0;    //全局初始化区

    char *p1;  //全局未初始化区

    main()

    {

    int b;栈

    char s[]="abc";  //栈

    char *p2;        //栈

    char *p3="123456";  //123456\0在常量区,p3在栈上。

    static int c=0;  //全局(静态)初始化区

    p1 = (char*)malloc(10);

    p2 = (char*)malloc(20);  //分配得来得10和20字节的区域就在堆区。

    strcpy(p1,"123456");  //123456\0放在常量区,编译器可能会将它与p3所向"123456"优化成一个

    地方。

    3、char字节数组转成NSString

    char info[20];

    NSString *str = [NSStringstringWithUTF8String:info];

    相关文章

      网友评论

          本文标题:在iOS开发中遇到C语言时的小细节(不断更新)

          本文链接:https://www.haomeiwen.com/subject/nnzpmttx.html