为什么编译器在使用struct变量时会说“Type specifier missing”

时间:2012-11-23 19:59:06

标签: c struct

我正在学习C语言并尝试学习一些关于Structs的知识,我在下面有这个例子,我试图看看结构内存分配是如何组成的。我已经知道结构中的每个字段都是单词化的,这样如果没有足够的内存,就会有空的内存空间,应该在示例中看到,但是编译器给了我一些错误,比如 类型说明符缺失 预期' 类型名称请求说明符或限定符 。怎么会?

#include <stddef.h>
#include <stdio.h>

typedef struct
{
    char name[25];
    int id;
    int year;
    char material;
} Student;

int
main(void)
{
    Student talu;
    printf("Size of tAlu %d\n", (int)sizeof(talu));
    printf("name size is %d\n", offsetof(talu, name));
    printf("id size is %d\n", offsetof(talu, id));
    printf("year size is %d\n", offsetof(talu, year));
    printf("material size is %d\n", offsetof(talu, material));
    return 0;
}

5 个答案:

答案 0 :(得分:3)

这是因为你忘记了结束括号:

char name[25];
//         ^^^   !

答案 1 :(得分:3)

你错过了一个支架。

 char name[25;

应为char name[25];

答案 2 :(得分:1)

我也尝试编译你的代码并得到错误,所以我最终解决了这个问题:

#include <stddef.h>
#include <stdio.h>

typedef struct
{
    char name[25];
    int id;
    int year;
    char material;
} Student;

int
main(void)
{
    printf("Size of tAlu %d\n", (int)sizeof(Student));
    printf("name size is %d\n", offsetof(Student, name));
    printf("id size is %d\n", offsetof(Student, id));
    printf("year size is %d\n", offsetof(Student, year));
    printf("material size is %d\n", offsetof(Student, material));
    return 0;
}

这是使用GCC作为编译器。

答案 3 :(得分:0)

offsetof()取成员的偏移量应计算为第一个参数。

阅读手册有帮助。

答案 4 :(得分:0)

OFFSETOF(3):“宏offsetof()从结构类型的开头返回字段成员的偏移量。”

未报告字段的大小,但报告它们在结构中的位置,offsetof()使用的原因是:

“组成结构的字段的大小可能因实现而异,编译器可能会在字段之间插入不同数量的填充字节”。