第九节 预处理语句

本文主要探讨C语言中的预处理语句,包括头文件的内容、宏定义、条件编译以及变参函数的使用。同时,还介绍了如何利用GDB调试器进行程序调试。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

预处理语句:

特点:以#开头的语句

#include:
    包含一个头文件,指的是把头文件的内容复制过来源码.c文件

#include <head.h>:
    从系统环境里面找到对应的头文件

#include "head.h":
    从本地开始找,如果找不到再到系统环境里面找

如何在编译的时候指定环境:
    -I 头文件路径

一般头文件里面写什么东西:

预处理语句:头文件,宏定义等
类型定义:typedef,各项结构体,共用体,枚举的声明
外部声明语句:extern 函数, extern 变量

#define:

宏定义:就是直接替换
宏定义一般加上(),以解决替换的时候的优先级问题,影响正常的逻辑

宏函数:

1,具备强大的兼容性,函数内部没有参数类型,没有返回值类型
2,宏函数它的返回值等于最后一条表达式的值
3,它也是个纯粹的替换
4,换行符是\

预处理语句都必须在一行里面,如果不在一行,请用换行符

条件编译:

格式:
#ifdef  宏定义
    判断后面这个宏定义是否有定义,如果有定义则选择编译这段话的内容

#else   这个可以不加
    否则编译这段话的你内容

endif   代表条件编译结束


格式:
#ifndef 跟上面的逻辑相反

#else   
    否则编译这段话的你内容
endif   代表条件编译结束


#if 判断后面的值是否为真,真的话则编译

#else

#endif

变参函数:

参数没有固定化的函数
例如printf这个函数;

1,变参函数第一个参数一般是字符串,因为需要指定后面数据的分析格式
2,变参函数的后面的参数个数是可变的,但是需要跟你之前指定的格式相互匹配
3,变参函数的变参传参原理引用栈原理

系统里面提供了变参函数的处理数据类型和函数原型给我们,方便调用变参函数:

va_list:变参函数的参数的链表头(首地址)类型
va_start(va_list arg_ptr, const char *format);
    这个函数指定变参函数的链表头指向哪里(指定地址到format这个地址后面)
va_arg(arg_ptr, int);
    这个函数是获取从当前位置(arg_ptr)之后按照某种格式(int)的数据,
    每次获取完之后它(arg_ptr链表头(首地址))
    都会往后偏移到下一个数据的位置

如何使用GDB调试器:

1,编译程序的时候添加一个-g的选项
2,调试程序的时候调用gdb命令调试程序

gdb的命令:
    1,list:罗列出代码的内容:
        list 行数,打印函数附近的代码出来
    2,默认回车则执行之前的命令
    3,runing:运行程序
        r 123 abc 类似于./test 123 abc 传入参数的意思
    4,breakpoint:设置断点
        b 9:在第九行设置一个断点
        b 9 if i==99:如果i变量等于99则在这里设置一个断点
        delete breakpoint 2:删除第二个断点

    5,infomation:
        info b打印断点信息

    6,单步调试:
        step:进入函数里面一步一步运行
        声明语句与函数名不具备暂停功能(因为不会出错)
        s 10:一次执行10条语句
        next:不进入函数

    7,printf:
        查看变量的值,如:p i,打印变量i的值
    whatis:
        查看变量类型,如:whatis i

   display:
    全程打印变量的值:如:display i

    8,查看栈:
        backtrace full:查看栈信息
        简写:bt full

    9,continue:
        程序继续运行
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值