OC-札记02

##C程序
代码

1
2
3
4
5
#include <stdio.h>
int main(){
printf("123\n");
return 0 ;
}

结果

1
2
3
4
5
6
cc -c 01.first.m
cc 01.first.o
./a.out
输入结果:123
这其中的过程分为,编译-链接-执行

##OC程序
代码

1
2
3
4
5
6
#import <Foundation/Foundation.h>
int main()
{
NSLog(@"123");
return 0;
}

结果

1
2
3
4
5
6
7
8
9
10
11
12
cc -c 01.first.m
cc 01.first.o
./a.out
输入结果:
Undefined symbols for architecture x86_64:
"_NSLog", referenced from:
_main in 01.first.o
"___CFConstantStringClassReference", referenced from:
CFString in 01.first.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

问题出在引入了库文件,OC不会自动链接库,需要给他引入,链接时,要用下面的指令:

1
2
3
4
cc 01.first.o -framework Foundation
./a.out
输入结果:123

另外,C和OC都可以采用快速编译+链接的做法

1
2
3
cc 01.first.m
cc 01.first.m -framework Foundation

##include和import的差别

1
2
3
4
5
6
7
8
9
#import的用途
1.#include一样,拷贝文件的内容
2.可以自动防止文件的内容重复拷贝
而C语言用#include时,为防止文件被重复拷贝,使用了如下:
#ifdef ONE
#define ONE
<#包裹的头文件#>
#endif

注:版权声明:本文为博主原创文章,未经博主允许不得转载。