debug の際は、まずは Syntax Error がなくなるように心掛けましょう。
例えば、自動インデントにまかせたりするだけで原因が簡単に分かることもありますので、 試してみましょう。 Emacs/Mule だと、region 指定(一方の端で Ctr-SPACE した後、もう一端にカーソルをもっていく)した後で、 M-x indent-region とすると、自動 indent を行ってくれます。 各行毎の indent は、tab でOKです。 ちなみに、Emacs/Mule で XXXX 行目に移動したいときは、M-x goto-line [Return]とした後、XXXXX[Return] とすれば、目的の行番号に移動してくれます。
decl_err0.cの場合
int main(int argc, char** argv) { int i; int result; for(i = 0; i < 10; i++) { result += i; /* 本来次の行で括弧を閉じ損ねたのが原因 */ return result; } /* decl_err0.c: In function `main': decl_err0.c:8: parse error at end of input */
int main(int argc, char** argv) { int i /* 2 行目で ; を忘れたけど */ int result; for(i = 0; i < 10; i++) { result += i; } return result; } /* decl_err1.c: In function `main': decl_err1.c:3: syntax error before `int' decl_err1.c:4: `i' undeclared (first use in this function) decl_err1.c:4: (Each undeclared identifier is reported only once decl_err1.c:4: for each function it appears in.) decl_err1.c:5: `result' undeclared (first use in this function) */
decl_err1.c:4: `i' undeclared (first use in this function) decl_err1.c:4: (Each undeclared identifier is reported only once decl_err1.c:4: for each function it appears in.)「4行目のiは、はじめて使うのだけど、宣言されていないよ」と怒っています。
kamada@cygwin% gcc -c decl_err2a.c kamada@cygwin% gcc -c decl_err2b.c kamada@cygwin% gcc -o decl_err2 decl_err2a.o decl_err2b.o decl_err2b.o(.data+0x0):decl_err2b.c: multiple definition of `global_var' decl_err2a.o(.data+0x0):decl_err2a.c: first defined here collect2: ld returned 1 exit status
int foo(); /* プロトタイプ宣言 */ int bar() { return foo(); } void foo() { return; } /* 定義の方は、void を返す */ /* decl_err3.c:5: conflicting types for `foo' decl_err3.c:1: previous declaration of `foo' */
int foo() { int y; y + 2 = 4; }
int n = 3; int array[n]; /* decl_err4.c:2: variable-size type declared outside of any function */
2001.10.29/ Tomio KAMADA: kamada@cs.kobe-u.ac.jp