在C中使用结构成员运算符

时间:2012-04-30 14:05:00

标签: c c99 structure

我不明白为什么我的C程序无法编译。

错误消息是:

$ gcc token_buffer.c -o token_buffer
token_buffer.c:22: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘.’ token

第一个结构 - 标记旨在用于许多地方,因此我使用可选的结构标记。第二个结构声明我没有在其他任何地方重用,所以我没有使用结构标签,而是我定义了一个名为 buffer 的变量。

然后,当我尝试为此结构的其中一个成员分配值时,编译失败。

帮助?

/*
 * token_buffer.c 
 */

#include <stdio.h>
#include <stdbool.h>

/* A token is a kind-value pair */
struct token {
    char *kind;
    double value;   
};

/* A buffer for a token stream */
struct {
    bool full;
    struct token t; 
} buffer;

buffer.full = false;

main()
{
    struct token t;
    t.kind = "PLUS";
    t.value = 0;

    printf("t.kind = %s, t.value = %.2f\n", t.kind, t.value);
}

3 个答案:

答案 0 :(得分:4)

您不能在C中进行独立操作:您需要将初始化放入main

int main() { // Don't forget to make your main return int explicitly
    struct token t;
    buffer.full = false; // <---- Here it is legal

    t.kind = "PLUS";
    t.value = 0;

    printf("t.kind = %s, t.value = %.2f\n", t.kind, t.value);
    return 0; // main should return status to the operating system
}

答案 1 :(得分:1)

违规部分是:buffer.full = false; 当你在外面设置值时。

将此声明放在main()

答案 2 :(得分:0)

分配和初始化是C中的两个不同的事情。只需做

struct {
    bool full;
    struct token t; 
} buffer = { .full = false };