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 " { "
后者原因是头文件声明函数时忘了加分号。