C程序的编译、链接、执行怎么来的?在.C文件里面写上符合C语言部分的源代码。OC也是一样的.记住:OC程序的后缀名是.m.



为什么要链接?第一个.o的目标文件里面它启动不了.因为它没有启动代码我们要加上启动代码,另外还要链接一些函数进去。

没有定义NSLog,a.out也没有出来.NSLog函数是Foundation框架之中的。如果你在OC程序当中使用到框架的类或者函数的话必须要告诉编译器这个类或者函数去哪里找。如果程序中使用到了框架中的函数或者类.那么在链接的时候,就必须要告诉编译器去哪1个框架中找这个函数或者类.因为框架有很多个。

NSLog函数是Foundation框架里面的,那么编译器在链接的时候找NSLog函数。框架有那么多,去哪个框架找?所以必须要得告诉编译器。怎么告诉它?在编译的时候、在链接的时候


OC程序的编译、链接、执行和C程序唯一的区别是在于链接的时候。如果你的程序用到了框架当中的功能,你在链接的时候必须要告诉它去哪个框架里面找。

去链接这个main.o的时候  以前说过链接做的事情其中之一就是要找函数。去哪里找函数呢?去这个Foundation框架里面找。

/*
1.OC程序的编译、链接、执行. 1). 在.m文件中写上复合OC语法规范的源代码. 2). 使用编译器将源代码编译为目标文件. cc -c xx.m a. 预处理
b. 检查语法
c. 编译. 3).链接 cc xx.o 如果程序中使用到了框架中的函数或者类.那么在链接的时候,就必须要告诉编译器去哪1个框架中找这个函数或者类. cc xx.o -framework 框架名称. cc main.o -framework Foundation 程序中用到了哪1个框架中的功能 那么就在这个地方告诉编译器. 4) 链接成功以后 就会生成1个a.out可执行文件 执行就可以了. 2、 我们1点击运行按钮 所有的事情Xcode就帮助我们自动做了. */ #include <stdio.h> int main(int argc, const char * argv[]) {
// insert code here...
printf("Hello, World!\n");
return ;
}
/**

 写上符合OC语法规范的源代码.

*/
#import <Foundation/Foundation.h> //引入Foundation框架里面的Foundation.h头文件. int main(){ NSLog(@"哈哈哈哈哈哈哈哈哈哈");
return ;
}

13_传智播客iOS视频教程_OC程序的编译链接的更多相关文章

  1. 14_传智播客iOS视频教程_OC的数据类型

    对比一下OC和C差别,首先第一个是数据类型. C语言的数据类型分哪几类?C语言有哪些数据类型? 基本数据类型当然还包括int的一些修饰符.像short.long.long long.unsigned. ...

  2. 15_传智播客iOS视频教程_OC语言完全兼容C语言

    OC支持C语言所有的运算符并且效果是一样的.C语言中所有的运算符OC都支持.这些所有的运算符OC当中全部都支持. 包括C语言的结构体.枚举全部都可以写在OC当中,没有任何问题,并且效果是一样的. 比如 ...

  3. 08_传智播客iOS视频教程_Foundation框架

    比如产生随机数.这个功能要你写吗?不用,因为苹果已经写好了.后面想开发一个ios程序,往界面上放一个按钮,实际上这个按钮不用你写别人已经写好了,你就拿过来拖一下就可以了. 框架是1个功能集 苹果或者第 ...

  4. 11_传智播客iOS视频教程_NS前缀和@符号

    NS前缀的有NSLog和NSString Cocoa就是用来开发带界面的应用程序. Foundation框架之中的类.函数绝大多数都是从NextStep来的.看到NS前缀就知道这个类是从哪里来的.是很 ...

  5. 12_传智播客iOS视频教程_注释和函数的定义和调用

    OC的注释和C语言的注释一模一样.它也分单行注释和多行注释. OC程序里面当然可以定义一个函数.并且定义的方式方法和调用的方式方法和我们C语言是一模一样的.OC有什么好学的?一样还学个什么呢? 重点是 ...

  6. 10_传智播客iOS视频教程_NSString

    从今天开始不会再去用C语言当中的字符串.因为OC当中设计了一种更为好用的存储字符串的变量. C的字符串和OC的字符串是有区别的. NSString类型的指针变量,只能存储OC字符串的地址.第一步是声明 ...

  7. 09_传智播客iOS视频教程_自动释放池与NSLog函数

    不要管什么是自动释放池,现在给你讲你也听不懂.就业班才讲,不要知道太多,知道太多对你不好.电影里面死的最惨的人就是知道最多的人.把代码写到自动释放池里面就可以了.NSLog是printf的增强版,它增 ...

  8. 07_传智播客iOS视频教程_#import指令

    mac切换中英文输入法默认是Ctrl+空格键. 预处理指令的执行时机是在编译之前.在编译之前执行预处理指令. #import指令是包含文件,将指定的文件的内容在预编译的时候拷贝到写指令的地方. #im ...

  9. 06_传智播客iOS视频教程_源文件后缀名和main函数

    OC与C语言的不同. 把OC程序运行起来,CPU只会找main函数.并且只会执行main函数当中的代码.当main函数的代码执行完毕之后这个程序就自动结束掉了. main函数的参数是可以让我们在运行程 ...

随机推荐

  1. ubuntu使用git提交github时,执行pull或者push命令要重新输入用户名和密码

    ubuntu使用git提交github时,执行pull或者push命令要重新输入用户名和密码: 1:问题现象: hlp@hlp:~/code/github_code/catch_imooc1$ git ...

  2. struts2 标签库使用

    [引用]json 使用 [引用]struts2 标签库使用 2011-05-11 16:13:00|  分类: 默认分类 |  标签: |举报 |字号大中小 订阅 本文转载自kangzye<st ...

  3. K/3Cloud 分页报表示例参考

    分页报表首先需要实现的方法就是GetList,这个方法用来获得分页的条件. 其他的就和其他报表类似了. using System; using System.Collections.Generic; ...

  4. 外星联络(bzoj 2251)

    Description 小 P 在看过电影<超时空接触>(Contact)之后被深深的打动,决心致力于寻找外星人的事业.于是,他每天晚上都爬在屋顶上试图用自己的收音机收听外星人发来的信息. ...

  5. 【BZOJ1834】network 网络扩容(最大流,费用流)

    题意:给定一张有向图,每条边都有一个容量C和一个扩容费用W.这里扩容费用是指将容量扩大1所需的费用. 求: 1. 在不扩容的情况下,1到N的最大流: 2. 将1到N的最大流增加K所需的最小扩容费用. ...

  6. linux下部署一个JavaEE项目的简单步骤

    部署项目的前提是准备好环境,包括:Java运行环境(JDK),Tomcat,Mysql数据库 1.首先将东西上传到服务器,我是在windows安装ssh工具(下载安装git即可http://gitfo ...

  7. 安装redis和phpredis模块

    安装redis shell> wget http://redis.googlecode.com/files/redis-2.0.4.tar.gz shell> tar zxvf redis ...

  8. jquery serializeArray() 方法通过序列化表单值来创建对象数组(名称和值)。

    serializeArray() 方法序列化表单元素(类似 .serialize() 方法),返回 JSON 数据结构数据. html代码: <form> <div><i ...

  9. 文本框变更值触发js事件

    //输入数量更新,不需要失去焦点才触发 $(document).on('input', "input[id^='itemquantity']", function () { sav ...

  10. Enhance Magento 404 page

    Magento default installation already has a predefined custom 404 page (no-route). But is it enough t ...