C代码的编译器(gcc),多文件编译

一、写一个hello word!

点击查看代码
#include <stdio.h>   //包含头文件(printf的头文件)

//<>          表示stdio.h在系统的/usr/include路径下
//""          表示当前目录
//#include    包含头文件的固定用法

int  main(int arg,const char *a)            //main 是C代码的入口函数,后面是参数
{
    printf("hellow word!\n");               //printf 是打印语句
    return 0;                               //代表函数的返回值(返回0,代表代码执行成功   返回 -1,代表代码执行失败  ),返回值返回给了操作系统。
}

注:使用C语言编写的是源文件,它是不能够直接执行的。原因是机器只能识别0和1的二进制
    源文件-------->编译------->二进制文件(可执行文件)

编译:
   gcc   XXXX.c   -o   helloworld

执行:
    ./helloworld

二、gcc编译器:

 $gcc   -v   : 查看gcc的版本
  gcc编译的代码只能够在Ubuntu(X86)上执行,不能在手机上执行,因为手机是(arm架构的);

点击查看代码
ubuntu@linux:~/test$file hello 
hello: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 3.2.0, BuildID[sha1]=90f99701f6d9ff5de84733f54d9892846930b7e0, not stripped
我们在编译时,其实在其内部已经执行了:

   预处理:对头文件,宏定义进行替换,对条件编译进行替换(预处理不会对语法进行检查,所以此阶段不占用程序运行时间)

       gcc  -E  xxx.c  -o  helloworld.i

   编译:对语法进行检查(对变量的赋值语法等),将预处理后的文件编译成汇编文件。

       gcc  -S  helloworld.i  -o   helloworld.s

   汇编:将汇编文件编译成二进制文件,但是这个文件没有链接库,所以他是无法执行的。

      libc.a 静态库 :在编译的时候,直接将所依赖的所有内容编译到可执行程序中。
      libc.so 动态库 :在编译的时候只是将符号链接编译进去,执行的时候会反过来找这个库。

       gcc  -c  helloworld.s  -o  helloworld.o

   链接:将依赖的库链接到可执行程序( .out )中.

       gcc  helloworld.o  -o  helloworld

       如果有多个文件:gcc a.o b.o c.o  -o  helloworld

       也可一步完成
       编译:
        gcc   xxx.c   -o   helloworld
       执行:
         ./helloworld

       或者
       编译:
        gcc  xxx.c
       执行:
        ./a.out

三、C代码多文件的编程

  一个工程文件中包含多个.c文件,每个.c文件中包含多个.h文件。
  多文件编程中一个 .c文件应该对应一个.h文件 ,main函数的那个.c文件除外,并且只能有一个main函数

     ├── add.c
     ├── add.h
     ├── main.c
     ├── sub.c
     └── sub.h

  防止头文件重复包含的机制:

点击查看代码
#ifndef 宏定义名
#define 宏定义名
//包含其他的头文件
//函数的声明
//变量的声明
//数据类型的定义。
//宏定义
#endif

   这里宏定义名一般默认为 :文件名_H
   宏定义的名字字母一般都是大写

编译:
    预处理,编译,汇编:
    gcc -c main.c -o main.o
    gcc -c add.c -o add.o
    gcc -c sub.c -o sub.o
    链接:
    gcc main.o add.o sub.o -o demo  
posted @ 2022-06-19 18:05  皆为过客  阅读(642)  评论(0)    收藏  举报