开发中遇到一些算法会用到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];