Xcode创建C项目以及C语言的编译流程介绍
2016-10-19 本文已影响228人
夏广成
用xcode新建c/c++ 项目,在osx application 中选择command line tool,点击next即可
C
在c语言当中,如果想在程序中调用外部的命令,可以使用system函数,使用这个函数需要引入stdlib.h头文件
#include <stdio.h>
#include <stdlib.h>
int main(){
printf("aaa\n");
system("ls");
printf("bbb\n");
return 0;
}
上面代码中的命令ls,主要是显示命令运行目录下的文件以及文件夹,那么也可以将ls替换为其他的c程序,比如
system("./a.out");
编译过程
c源码在编译的时候,大致经过了一下几个流程
- 1:预处理 将需要的头文件加载到源文件,可以使用命令gcc -E 来查看
gcc -E hello.c -o hello.i
- 2:编译 第一步预处理之后的代码,检查语法。检查无误后,编译成汇编语言
gcc –S hello.i –o hello.s
- 3:汇编 将第二步的.s文件编译成二进制文件,但是此时的二进制文件还不可以执行
gcc –c hello.s –o hello.o
- 4:链接 链接器的作用是将编写的目标代码以及系统的标准启动代码和库代码这三部分合并成一个文件。此时的这三部分都已经是二进制文件了。只是将这三块二进制文件进行合并。
gcc默认使用动态库,就是在运行时加载库。还有一种是静态库,静态库在编译阶段就已经将库加载到执行文件中,一般来说会比较大。我们可以在linux通过ldd命令,mac中通过otool命令,查看可执行文件需要的动态库
//Linux
ldd a.out
//Mac
otool -L a.out
image.png
C++
c语言用1和0表示真和假,c++引入了boolean类型,有了true和false。由于c++兼容了c语言,因此c++也可以用1和0表示真和假。因此在
if(x=3){...}这样的一个表达式中,x是被赋值为3,而3是个非0的数,也就是真,就会执行表达式的内容。
// 头文件iostream 对cout对象进行了说明
// #开头表示预处理命令
#include <iostream>
// 如果没有下面这行命名的话,那么cout就需要这样写:std::cout 那么endl就需要写成:std::endl
using namespace std;
// main 函数的规范是返回int类型
int main(){
// << 插入符
// endl 换行标记
// cout 是类库当中定义的对象
cout << "Hello" << endl;
cout << "World!" << endl;
return 0;
}
附录
阮一峰博客《编译器的工作过程》