Linux基础——“C语言高级编程” C语言中的细节你真的知道吗?

GCC简介

gcc 所支持后缀名解释

.c c原始程序
.C / .cc /.cxx C++原始程
.m Objective—C原始程序
.i 已经过预处理的C原始程序
.ii 已经过预处理的C++原始程序
.s/.S 汇编语言原始程序
.h 预处理文件(头文件)
.o 目标文件
.a/.so 编译后的库文件

一、GCC编译的过程

GCC的编译流程分为四个步骤:

  1. 预处理
  2. 编译
  3. 汇编
  4. 链接
#include<stdio.h>
#include<math.h>

#define N 10
#define _DEBUG_

int main(int argc ,char **argv)
{
   

    double m =615;
    double n;

    m += N;

    n = sqrt(m);
#ifdef _DEBUG_
          printf("debug:m=%lf  n=%lf\n",m,n);
#else
          printf("release:m=%lf n=%lf\n",m,n);
#endif

          return 0;

}

在这里插入图片描述

1. 预处理:

把程序中 # 开头的语句进行处理 ,生成文件 .i

在这里插入图片描述
把头文件和宏都展开,判断语句,把判断结果我语句保留.

我们来查看一下:

gcc -E gccc.c -o gccc.i

在这里插入图片描述

2.编译:

把预处理文件 .i 进行处理,生成汇编文件 .s,这个过程会检测代码的错误。

gcc -S gccc.i -o gccc.s

在这里插入图片描述

3.汇编处理

把汇编文件 .s 进行汇编处理,生成目标文件 .o
在这里插入图片描述

4. 链接

将目标程序连接库资源,生成可执行程序

#gcc  gccc.s -o gccc
#./gccc

二、GDB调试工具

1. 调试器——GDB调试流程

首先使用gcc对test.c 进行编译,注意一定要加上选项 “ -g

#gcc -g test.c -o test
#gdb test

注意:gdb是在你运行时候,发现结果不对,当你编译时候出现错误,gdb是无法调试的。

GDb调试流程 说明
-(gdb)l 查看文件
-(gdb)b +行数 设置断点
-(gdb)info b 查看端点情况
-(gdb)r 运行代码
(gdb) p n 查看变量值
(gdb)n / (gdb) s 单步运行
(gdb)c 恢复程序运行(断点调换)
(gdb)help [command] 帮助

在这里插入图片描述
程序文件和可执行文件大小是不同的,可执行文件大很多。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述在这里插入图片描述

2. GDB的使用切记点:

  1. 在gcc编译选项中一定要加入“ -g ”
  2. 只有在代码处于 “ 运行 ” 和 “ 暂停 ” 状态时才能查看变量值
  3. 设置断点后程序在指定行之前停止。

若我们在gdb如何调试参数呢?

# (gdb) set args  X X

3. 条件编译

  • 编译器根据条件的真假决定是否编译相关的代码

  • 常见的条件编译有两种方法:

根据宏是否定义,其语法如下:

  #ifdef<macro>   //如果定义一个宏,执行一段代码,
  .....
  #else       //否则执行其他代码
  ....
  #endif  

根据宏的值,其语法如下:

  #if<macro> 
  ......
  #else 
  .....
  #endif 
  • 6
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值