arm-linux-gcc编译关于typedef的error:expected '=', ',', ';', 'asm' or '__attribute__' before 'function'

1、arm-linux-gcc编译报error:

error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘attribute’ before ‘fuction’

2、先说明工程结构:

每一个.c文件都对应一个.h文件,有一个include.h包含所有的其他.h文件:

#ifndef __INCLUDE_H
#define _INCLUDE_H

/*	.h头文件包含 区域	*/
#include "a.h"
#include "b.h"

/*	#define 区域	*/		
/*	#typedef 区域	*/
/*	变量和函数 区域	*/

#endif

3、解决方法一:

error指向 function
function是a.h中声明的函数:

void function(u8 c);

多次尝试发现是u8问题,

typedef unsigned char  u8;

u8展开为unsigned char可解决。

4、解决方法二(根本原因)

但实际上u8已在.h中声明且已包含进.c文件,如第2点工程结构。
根本原因在于u8的声明放在

#include "a.h"

之后!

As we know, 包含头文件 #include “a.h” 的作用在于将a.h这个文件的内容展开,复制到#include语句的位置。如果include.h中声明的typedef、变量等,在其他.h文件中有用到(一般都会),则typedef、变量等声明必须写在其他.h文件之前。既结构为:

#ifndef __INCLUDE_H
#define _INCLUDE_H

/*	#define 区域	*/		
/*	#typedef 区域	*/
/*	变量和函数 区域	*/

/*	.h头文件包含 区域	*/
#include "a.h"
#include "b.h"

#endif

和原来的结构相比,#include “a.h”#include “b.h” 放在所有的声明之后,形成”先声明后使用“结构,当a.h 或 b.h使用到时,就不用出现此问题。

//————————————2020.4.24补充——————————————
朋友遇到了类似的问题:

error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘attribute’ before ’ { ’

不同点在于我的问题是before “funciton”, 他是before " { "
后者原因是头文件声明函数时忘了加分号。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值