1

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

错误信息是:

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

第一个结构——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);
}
4

3 回答 3

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
}
于 2012-04-30T14:07:26.907 回答
1

有问题的部分是: buffer.full = false; 当您在外面设置值时。

把这个语句放在里面main()

于 2012-04-30T14:07:42.677 回答
0

赋值和初始化是 C 中的两个不同的东西。只要做

struct {
    bool full;
    struct token t; 
} buffer = { .full = false };
于 2012-04-30T14:52:47.257 回答