我可以进入这个项目。它是在Keil vision 5中编译的。当我编译这个项目时,它没有错误。但是,当我访问一个头文件时,它会显示一个错误,说明s8变量有以下错误=错误:未知类型名称's8'。
typedef struct
{
s8 str[PARAM_TEXT_SIZE];
}
text_struct;该变量的定义如下:
typedef char s8;我想知道我是否错配置了编译器,或者为什么编译后忽略了这个错误。
PS:这是我在StackOverflow网站上的第一个问题。如果我的问题不清楚或者放错了,很抱歉。
发布于 2017-11-13 11:50:49
如果s8是在头中定义的,假设是foo.h,而您的text_struct是在另一个标头中定义的,那么如果包含bar.h的文件首先包含foo.h,那么它就可以很好地编译。然而,它是不干净的,这通常是一个良好的做法,不依赖于这样的先决条件包括。
下面是一个非常简单的例子:
foo.h
typedef int myType;bar.h
typedef struct {
myType x;
} myStruct;main.c
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#include "foo.h"
#include "bar.h"
myStruct y;
int main(void) {
return 0;
}但是,如果bar.h是静态计算的,那么它将产生一个错误,因为这里不知道myType。如果bar.h也包含在没有foo.h的情况下,那么您将有一个编译错误。下面是一个例子:
error.c
#include "bar.h"
myStruct z;gcc -I.-o错误.o 文件中包含从error.c:1:0: bar.h:2:5: error:未知类型名称' myType ' myType x;
https://stackoverflow.com/questions/47261797
复制相似问题