第三章-C语言原理

谁调用了main函数,返回值给谁了呢?

C99建议把main函数指定为int型,他要求函数带回一个整数值,在main函数中执行的最后一句return 0;,当主函数正常结束时,返回0,反之,当函数出现异常或者执行错误时,函数值为一个非零整数.这个函数值是返回给调用main函数的操作系统的,因此,每个C语言程序都必须有一个main函数

Mac-OS平台如何创建C语言文件?

  1. 利用Xcode:代开XCode->顶部工具栏File->new->CFile->输入文件件名01.第一个C语言程序.c,注意写上后缀名
  2. 利用终端:touch xx.c open xx.c即可

C语言的结构

C语言的第一个程序

#include <stdio.h>
int main(){
    printf("hello world!");
    return 0;
}

C程序的编译/链接/运行

  1. 整个C程序的过程:
    1. 编辑:在文件中编写代码
    2. 编译:
      1. 作用:把C语言代码翻译成0和1
      2. 过程:先用C编译系统提供的”预处理器(又称预编译器,预处理程序)”,对程序中的预处理指令进行编译预处理,例如:#include,就是将stdio.h头文件的内容读取进来,取代#include行.
      3. 由预处理得到的信息与程序其他部分一起,组成一个完整的/可以用来正式编译的源程序
      4. 然后由编译系统对该源程序进行编译
      5. 注意: 在编译系统对源程序进行编译时,自动包括了预编译正式编译两个阶段,一气呵成,用户不必分别发出二次指令.
      6. 工具:
        1. XCode编译器
          1. XCode3 用的是gcc编译器
          2. XCode4开始用的是LLVM编译器(该编译器前端用的是clang编译器,编译器分前端跟后端,前端就是用来翻译的)
        2. 用Visval C++编译的后缀名为.obj
      7. 怎么使用clang编译器来编译代码呢?
        1. clang编译器提供了很多UNIX指令,只要我们使用这些指令就可以编译C语言代码
        2. 指令:cc -c 需要编译的文件名.c
        3. -c的c是compile:编译的意思`
      8. 操作:
        1. 打开终端cd到.c文件目录下,输入cc -c 01.第一个C语言程序.c 回车,就会发现文件目录下多了一个.o文件(目标文件:0和1文件)
      9. 既然.o是0和1文件,为何不能直接执行呢?
        1. 原因:代码中我们用到了printf函数,因为这个函数不是我们自己定义的,是系统自带的,因此我们程序运行过程中依赖于系统自带的的东西,因此,.o只包含我们自己写的东西,因此,就有了链接操作
      10. 编译器的错误和警告功能
        1. 如果代码有语法问题,编译器会直接报错。并指出错误的个数和具体行号。
        2. 只要有1个错误,程序就不能编译成功,也不会生成.o文件
        3. 警告信息只是编译器的一些建议,并不影响编译通过
    3. 链接:
      1. 其实就是把.o与跟系统自带的函数库合并在一起(当多个文件时,连还要连接所有的.o),生成一个可执行文件(a.out)
      2. 经过编译得到的二进制目标文件,还不能提供计算机直接运行.一个程序可能包含若干个源程序文件,而编译是以源程序文件为对象的,每个源程序文件对应编译一个目标文件.连接就是把编译得到的各个目标模块连接装配起来,再与函数库相连接成一个整体,生成可执行程序(executive program),在Visual C++中器后缀名为.exe,如f.exe 在clang为:a.out
      3. 由链接器完成,clang编译器里面已经包含了链接指令
      4. 指令:cc 目标文件.o回车,生成a.out文件
    4. 运行可执行文件
      1. 两种方式:
      2. 双击:第一次双击会弹出让你选择什么程序来运行,应用程序->终端(Xcode也可以),直接就可以看到输出结果了
      3. 命令: ./a.out ./告诉他是当前文件,注意没空格
  2. 为了编译/连接/运行,必须要有相应的编译系统,目前使用的很多编译系统都是集成环境(IDE)的,把程序的编辑/编译/连接/运行等全部操作都几种在一个界面上运行.
  3. 其他clang指令
    1. 修改可执行文件名称:cc xxx.o -o 文件名
    2. 一起编译、链接:cc xxx.c

整个程序的运行过程

总图


小结: C语言代码可以写在其他类型的文件中,比如.text文件中,但是由于clang编译器不识别该文件,识别.c文件,因此写在了.c文件中

Table of Contents