1

Cプログラムがコンパイルされない理由がわかりません。

エラーメッセージは次のとおりです。

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

最初の構造–トークンは多くの場所で使用されることを目的としているため、オプションの構造タグを使用します。2番目の構造体宣言は他の場所では再利用していないため、構造体タグを使用していませんが、代わりにbufferという名前の変数を定義しています。

そして、この構造体のメンバーの1つに値を割り当てようとすると、コンパイルが失敗します。

ヘルプ?

/*
 * 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では2つの異なるものです。

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