【嵌入式C语言补强】学习日志(二)

C语言编译常见错误(预处理)

【include】

  • include有两种形式
1、#include "name"——从当前目录下寻找(自定义头文件)
2、#include <name>——从系统的环境变量中寻找(系统库)

错误一

头文件寻找位置不正确
修改之前的【test.c】文件(将宏定义单独作为一个头文件【test.h】添加)
此时系统因为不能在当前文件目录下寻找到【test.h】文件报错
若将#include <test.h>修改为 #include "test.h"则无报错

错误二

不能在当前目录下找到头文件
新建一个存放头文件的库【inc】,并将头文件【test.h】移入inc中
此时系统还是因为不能在当前文件目录下寻找到【test.h】文件报错(即使使用了 #include "test.h"
解决方法一:在【test.c】中将头文件寻找位置写清楚—— #include "./inc/test.h"
解决方法二:使用 命令【gcc -I】+查找头文件的目录 ,也可以是 gcc -I inc/ -o Hello test.c

错误三

链接错误——语法之类的没错,最后打包时出错——功能不完善、生成可执行文件时汇总不完全
示例:
在【test.c】中新增一个空函数fun(无返回值,无参数)
此时因为系统不能链接函数fun的实现而报错(虽然编译正确)
//collect2说明链接器报错
解决方法一:实现函数fun的功能(本例给一个空功能也行)
解决方法二:在其他【.c】文件中编写实现本函数功能的代码
//相当于在别的文件中编写模块并在主程序中一起链接后使用
此时要将两个【.c】文件一起打包生成可执行文件
  • 引出问题:多个【.c】文件如何打包成一个可执行文件?
解决方法一:gcc -I inc/ -o Hello test.c fun.c——GCC自动将每个【.c】文件编译后一起打包
解决方法二(推荐):先将每个【.c】文件使用 gcc -c汇编完成输出得到【.o】文件最后再一起交给GCC打包

【define】

基本介绍:#define        名称:宏        目的:替换(不进行语法检查)

  • define有两种形式

1、#define            宏名                宏体

EX:#define          ABC                  6

2、#define            宏函数             宏体

EX:#define          ABC( x )         1 + x

宏体随着宏函数参数改变而改变

  • 条件编译:#ifdef、#ifndef——#else——#endif

  • 预定义宏(系统定义宏)

__FUNCTION__        :函数名

__LINE__        :行号

__FILE__         :文件名

使用预定义宏的示例:

依次打印【当前函数名】、【文件名】、【行号】得到

用一个函数封装打印操作,可以看到在主函数中调用函数也能定位到封装函数中的行号

//在调试程序中可以快速定位函数具体在哪一行执行


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值