OC开发之——第一个OC程序(2)

一 概述

  • C语言程序的代码文件以“.c”结尾,OC程序是以.m为结尾
  • OC完全兼容C语言,故本文的程序示例,包含C程序和OC程序
  • 简单介绍在OC程序开发中遇到的问题
  • 几个重要的概念

二 第一个OC程序(C语言)

2.1 程序创建

  • 进入到OC程序文件夹中

    复制
    1
    
    cd /Users/zxc/Code/OC
    
  • 创建第一个OC文件

    复制
    1
    
    touch 01-Hello-C.m
    
  • 打开OC文件,进行编辑(默认打开xcode,请事先已安装)

    复制
    1
    
    open 01-Hello-C.m
    

2.2 代码编写

复制
1
2
3
4
5
6
7
#include <stdio.h>

int main()
{
    printf("Hello_C\n");
    return 0;
}

2.3 终端指令编译

  • 编译程序(cc -c 要编译到程序名),生成“程序名.o”文件

    复制
    1
    
    cc -c 01-Hello-C.m
    
  • 链接程序(cc 程序名.o),生成“a.out”文件(可执行文件)

    复制
    1
    
    cc 01-Hello-C.o
    

2.4 运行程序

  • 运行程序(./a.out),屏幕打印输出结果

    复制
    1
    
    Hello_C
    

三 第二个OC程序(Object-C语言)

3.1 程序创建(延续程序一到编译环境)

  • 创建OC文件(object-c语言)

    复制
    1
    
    touch 01-Hello-OC.m
    
  • 打开OC文件,进行编辑(默认打开xcode,请事先已安装)

    复制
    1
    
    open 01-Hello-OC.m
    

3.2 代码编写

复制
1
2
3
4
5
6
7
#import <Foundation/Foundation.h>

int main()
{
    NSLog(@"Hello OC");
    return 0;
}

3.3 终端指令编译

  • 编译程序(cc -c 要编译的文件名.m)

    复制
    1
    
    cc 01-Hello-OC.m
    
  • 链接(cc 要编译的文件名.0 -framework Foundation)

    复制
    1
    
    cc 01-Hello-OC.o -framework Foundation
    

3.4 运行程序

  • 运行程序(./a.out),屏幕打印输出结果

    复制
    1
    
    2020-03-17 22:25:26.025 a.out[4315:79925] Hello OC
    

四 程序编译中,可能出现的问题

4.1 程序编译中出现的

4.1.1 现象

复制
1
2
3
4
5
6
7
8
9
10
11
12
13
14
01-Hello-OC.m:6:5: warning: implicitly declaring library function 'NSLog' with
      type 'void (id, ...)' [-Wimplicit-function-declaration]
    NSLog(@"Hello OC");
    ^
01-Hello-OC.m:6:5: note: include the header <Foundation/NSObjCRuntime.h> or
      explicitly provide a declaration for 'NSLog'
1 warning generated.
Undefined symbols for architecture x86_64:
  "_NSLog", referenced from:
      _main in 01-Hello-OC-0ad647.o
  "___CFConstantStringClassReference", referenced from:
      CFString in 01-Hello-OC-0ad647.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

4.1.2 原因

  • NSLog缺少头文件

4.1.3 解决办法(导入头文件):

  • #import <Foundation/Foundation.h>

4.2 链接过程中出现

4.2.1 现象

复制
1
2
3
4
5
6
7
Undefined symbols for architecture x86_64:
  "_NSLog", referenced from:
      _main in 01-Hello-OC.o
  "___CFConstantStringClassReference", referenced from:
      CFString in 01-Hello-OC.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

4.2.2 原因

  • 链接时,未指定链接库

4.2.3 解决办法(指定链接库)

  • cc 01-Hello-OC.o -framework Foundation

五 几个概念

5.1 NSLog与print的区别

  • NSLog接收OC字符串作为参数,printf接收C语言字符串作为参数
  • NSLog输出后会自动换行,printf输出后不会自动换行
  • 使用NSLog需要#import<Foundation/Foundation.h>
  • 使用printf需要#include<stdio.h>

5.2 #import的作用

  • 跟#include一样,用来拷贝某个文件的内容

  • 可以自动防止文件内容被拷贝多次,也就是为头文件中不用加入下面的预处理指令了

    复制
    1
    2
    3
    
    #ifdef _STDIO_H
    #define _STDIO_H
    #endif
    

5.3 Foundation框架的作用

  • 开发OC,iOS,Mac程序必备的框架
  • 此框架中包含了很多常用的API(应用程序接口)
  • 框架中包含了很多头文件,若想使用整个框架的内容,包含它的主头文件即可#import <Foundation/Foundation.h>
  • Foundation的路径:/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h
 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值