我对C有点陌生,并且对我目前正在从事的项目有麻烦。本质上,我具有以下文件:main.c,alarm.c,alarm.h
我在alarm.c中有一个结构声明,如下所示:
#define STRLEN 150;
struct alarmparams
{
char time[STRLEN];
char duration[STRLEN];
char snooze[STRLEN];
char port[STRLEN];
};
在main.c中,我有:
#include <stdio.h>
#include <string.h>
#include "alarm.h"
int main(int argc, char *argv[])
{
struct alarmparams params;
printf("%s, %s\n", params.time, params.duration);
}
在alarm.h中,我有:
struct alarmparams;
现在,当我去编译时,出现以下错误:
error: storage size of ‘params’ isn’t known
我浏览了有关此错误的其他文章,因此我已经对此进行了一些研究。我也尝试了一些建议的解决方案,或者是我得到了完全相同的错误,或者是我得到了更多的错误。我对如何解决这个问题不知所措。
有什么我想念的吗?我声明不正确吗?
通常应该在头文件或c文件中声明结构吗?还是有关系吗?两者之间有什么区别?
struct foo {...};
和
typedef struct foo {...};
最佳答案
struct alarmparams;
是不完整类型的声明。您可以创建指向此类型对象的指针,但在完成之前不能声明此类型的对象或获取其大小。您必须使其完整的声明在
main.c
中可见,以声明其类型的对象。如果您在
alarm.c
和 main.c
中都使用该类型,只需在 alarm.h
中声明它并在 alarm.h
中包含 main.c
。对于您的第二个问题,两者之间的区别是:
struct foo {...};
和
typedef struct foo {...} foo_;
在后一种情况下,您还要为类型名称
foo_
声明别名struct foo
。关于c - C : Error storage size of 'params' isn't known中的struct,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20056892/