包括导致struct别名不可见?

时间:2014-10-31 00:19:54

标签: c struct include typedef

在我的C项目中,我有一个带有结构声明(带别名)的头文件和一个带有接受该结构作为参数的函数的头文件(使用别名)。我在函数上收到错误expected ')' before '*' token。从研究开始,我认为这表明别名在函数的命名空间中是不可见的。我有一个相当复杂的include网络,我认为可能会导致这种情况。这是一个简化的例子。

结构声明标题:

#ifndef STRUCTHEADER_H_
#define STRUCTHEADER_H_
#endif /* STRUCTHEADER_H_ */

#ifndef STRUCTFUNCTIONS_H_
#include "structFunctions.h"
#endif


struct myStruct{

};

typedef struct myStruct mys;

结构函数标题:

#ifndef STRUCTFUNCTIONS_H_
#define STRUCTFUNCTIONS_H_
#endif /* STRUCTFUNCTIONS_H_ */

#ifndef STRUCTHEADER_H_
#include "structHeader.h"
#endif

void func(mys* s);

main.c中:

#ifndef STRUCTHEADER_H_
#include "structHeader.h"
#endif

int main(int argc, char* argv[]){
    return 0;
}

但是,当我将main.c更改为:

#ifndef STRUCTFUNCTIONS_H_
#include "structFunctions.h"
#endif

int main(int argc, char* argv[]){
    return 0;
}

错误消失了。我使用include错了吗?

1 个答案:

答案 0 :(得分:0)

您需要更改structHeader.h,以便在它包含structFunctions.h之前声明结构,因为函数定义需要引用别名。在C中,您只能引用先前声明的名称。

#ifndef STRUCTHEADER_H_
#define STRUCTHEADER_H_
#endif /* STRUCTHEADER_H_ */

struct myStruct{

};
typedef struct myStruct mys;

#ifndef STRUCTFUNCTIONS_H_
#include "structFunctions.h"
#endif