我对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.cmain.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/

10-11 06:44