-1

さて、これはばかげた質問になることはすぐにわかりますが、この単純なCプログラムがコンパイルされない理由がわかりません。

#include <stdio.h>
#include <stdlib.h>
typdef struct CELL *LIST;
struct CELL {
    int element;
    LIST next;
};
main() {
    struct CELL *value;
    printf("Hello, World!");
}

私はCプログラミングに不慣れで、一般的なプログラミングではなく、Cに慣れています。Objective-C、Java、Matlab、およびその他のいくつかに精通していますが、何らかの理由でこれを理解できません。それが違いを生むなら、私はOSXでGCCを使用してそれをコンパイルしようとしています。ご協力いただきありがとうございます!

私が受け取っているエラーメッセージは

functionTest.c:5: error: expected specifier-qualifier-list before ‘LIST’
functionTest.c:7: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘struct’
4

4 に答える 4

2

主な理由は、と入力typedefしたことですtypdef。ただし、他にも2つのことを行う必要があります。

  • return 0;の末尾に追加しmain()ます。
  • の署名をmainに変更しますint main(void)
于 2012-10-13T22:42:43.523 に答える
2

最も重要なこと:typedefのスペルを間違えました。

次に、少なくとも最近では、通常、次のようにreturnタイプをmainに追加します。

int main()

また、mainは終了ステータスを返すことになっているので、次のようになります。

#include <stdio.h>
#include <stdlib.h>

typedef struct CELL *LIST;

struct CELL {
  int element;
  LIST next;
};

int main() {
  struct CELL *value;
  printf("Hello, World!\n");
  return 0;
}
于 2012-10-13T22:43:15.310 に答える
2

でコンパイルしようとしましたgcc -Wall -g yourprog.c -o yourbinaryか?

私が得ている:

yourprog.c:3:8: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'struct'
yourprog.c:6:5: error: unknown type name 'LIST'
yourprog.c:8:1: warning: return type defaults to 'int' [-Wreturn-type]
yourprog.c: In function 'main':
yourprog.c:9:18: warning: unused variable 'value' [-Wunused-variable]
yourprog.c:11:1: warning: control reaches end of non-void function [-Wreturn-type]

スペルを間違えtypedefたので、の署名を変更して内部mainを追加する必要があります。return 0;

ちなみに、あなたのtypedef味はとても悪いと思います。(Gtkのように)コーディングしてtypedef struct CELL CELL_t宣言することをお勧めします。これは、へのポインタCELL_t* value = NULL.であることを本当に覚えておきたいからです。特に、 (読みやすさの理由から)ポインターとは何か、ポインターではないものをすばやく理解することが非常に重要であるため、typedef-sは嫌いです。valueCELL_ttypedef struct CELL* CELL_ptr;

実際、私はむしろ提案したい

 struct cell_st;
 typedef struct cell_st cell_t;
 cell_t *value = NULL;

(私はすべてのポインターをNULLに初期化するのが好きです)。

于 2012-10-13T22:43:37.573 に答える
0

メイン関数にリターンを追加します

于 2012-10-13T22:40:43.900 に答える