我不明白为什么我的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);
}
答案 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 };