#include顺序不正确导致定义无法找到定义

时间:2021-07-01 16:44:41

本意是想将全部头文件包含在一个文件里,可以省去每次在各个c中添加各种头文件。

因此在includes.h中做了以下包含:

#include <bsp.h>

#include <app.h>

#include <os.h>

#include "LED.h"

#include "bsp_ser.h"

 

然后在user.c中做以下包含:

#include "includes.h"

 

以为这样使用就不用每次在各个C文件里都添加各种头文件了,结果编译还是出了问题:

error: #20: identifier "DMA_Channel1" is undefined

检查,发现是#include "bsp_ser.h"位置在#include <app.h>后面导致的。将顺序变成这样就好了:

#include <bsp.h>

#include "bsp_ser.h"

#include <app.h>

#include <os.h>

#include "LED.h"

总结,头文件的包含在编译时是按顺序进行的,在变量层层嵌套时(本例就是,头文件里有各种typedef)会发生嵌套混乱找不到定义的情况。此时就只能仔细调整顺序了。

或者在使用的地方单独添加该头文件,例如在user.c中做以下包含也是没问题的,编译通过:

#include "bsp_ser.h"

#include "includes.h"