gccでコンパイルできない理由を解説

このQ&Aのポイント
  • gccでコンパイルする際にエラーが発生し、コンパイルができない問題が生じています。
  • プログラム中の変数の型や構文に誤りがあり、コンパイルエラーが発生しています。
  • コンパイルエラーの原因として、`Int`という未定義の型や、変数`col`の未宣言、構文エラーなどが考えられます。
回答を見る
  • ベストアンサー

gccですが、コンパイルができません!

以下のプログラムですが #include <stdio.h> int main() { Int col; char i; scanf( "%d", &col ); for( i = 0 ; i < 26 ; i++ ){ if( i > 0 && ( i % col ) == 0 ) printf( "\n" ); printf( "%c", 'a' + i ); } return 0; } 以上のプログラムをgccでコンパイルしました。 コンパイルするために入力した文字→  gcc p.c -o p.exe 以下のエラーがでてコンパイルできません。 p.c: In function `main': p.c:4: error: `Int' undeclared (first use in this function) p.c:4: error: (Each undeclared identifier is reported only once p.c:4: error: for each function it appears in.) p.c:4: error: syntax error before "col" p.c:7: error: `col' undeclared (first use in this function) p.c:17:2: warning: no newline at end of file  以上なぜコンパイルができないのですか? よろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • Wr5
  • ベストアンサー率53% (2177/4070)
回答No.1

そんな難しい英語でもないのですから、読みましょうよ。 >p.c: In function `main': >p.c:4: error: `Int' undeclared (first use in this function) >p.c:4: error: syntax error before "col" main関数内、ソースファイルの4行目に"Int"という宣言されていないのものがある。 上記のエラーにより"col"が文法エラー。 >p.c:7: error: `col' undeclared (first use in this function) ソースファイルの7行目に"col"という宣言されていないものがある。 Intじゃなくて、intじゃありませんか? 大文字・小文字は区別しますが…。 どこかで #define Int int とか、 typedef Int int; とかしていない限りはエラーでしょう。

gogatunijyuku
質問者

お礼

 皆様ご回答誠にありがとうございました。 4行目エラーと出ていたのに、丸投げ質問をしてしまいました。  ご指摘通りIntをintに変えたらOK^^でした。 今度からちゃんと見て質問します。

その他の回答 (6)

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.7

i を char にする理由は, はっきり言って思いつきません>#6. 全く思いつかないわけじゃないんだけど, 「とんでもなくスタックがひっ迫していて char じゃないとそもそも動かない」 という状況しか出てこない. そして, スタックアラインメントの関係でそのような状況は (完全に否定できないものの) おそらく非常に作りにくい. いずれにしても ・int 以下の型の値は何かするたびに int に自動的に変換される ・printf の 2つ目以降の引数は可変長引数の ... の部分だから int に自動的に変換される ・そもそも C において 'a' の型は int なので, i を int にできるなら int の方がはるかに普通.

  • Wr5
  • ベストアンサー率53% (2177/4070)
回答No.6

たびたび、フォロー(ツッコミ)ありがとうございます>#5 わりとどうしようもない間違いかますことが…… ループ変数にcharは…確かに普通は見ませんね…。 >printf( "%c", 'a' + i ); でcharにした…んでしょうか……。intでも問題ありませんけど……。

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.5

ど~でもいいですが, typedef なら typedef int Int; でしょう>#1. しかし, ループ変数を char にするってのも珍しいスタイルだなぁ....

  • jacta
  • ベストアンサー率26% (845/3158)
回答No.4

すでに回答が出ているように、intと書くべきところにIntと書いてしまっているからです。 Cでは、大文字と小文字は厳密に区別します。 もし、曖昧に扱う癖がついているのなら、早い段階で矯正しましょう。 あと、最後の警告については下記の理由かと思います。 http://www.kijineko.co.jp/tech/superstitions/last-letter-of-file-is-brace.html

回答No.3

> なぜコンパイルができないのですか?  変数宣言部の「Int col;」が 「int」ではなく「Int」と、大文字に成ってしまっているから ではでは…

  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.2

この先お世話になるエラーメッセージです。人に頼らずに読めるようになりましょう。 > p.c:4: error: `Int' undeclared (first use in this function) よく出会うエラーです。 undeclared : 宣言されていない。 ということで、宣言されていない変数や関数を使おうとするときに発生します。 主な原因は ・必要なヘッダを#includeしていない ・宣言と使用箇所の順番違う ・只の入力間違い です。 何を使おうとしたのが問題なのか、というのは Int だと言っています。 ここまででわかったのではないでしょうか?

関連するQ&A

  • エラーが出てコンパイルができません…

    #include<stdio.h> void main(void) { int i; i=0; while(i<3){ printf("おーい\n\"); printf(" やっほー\n\n\"); i=i+1; } printf("プログラムを終了します\"); } と本に書いてあった通りに入力したら、下のようなエラーが出てきました。 7: 文法エラー before \"i\" 9: stray \'\\\' in program 10: stray \'\\\' in program 10: 文法エラー before \"n\" 11: stray \'\\\' in program 11: 文法エラー before \"n\" 12: `i\' undeclared (first use in this function) 12: (Each undeclared identifier is reported only once 12: for each function it appears in.) トップレベル: 15: error: 文法エラー before string constant 15: conflicting types for built-in function `printf\' 15: data definition has no type or storage class 16:2: ファイル末尾に改行がありません 解決策と原因を教えて下さい。 宜しくお願い致します。

  • Ubuntu feisy fawnでGTK+のプログラミングのコンパイルにて

    Ubuntu feisty fawnでGTK+とgccを使ってプログラミングをしたいのですが、コンパイルで手間取ってしまいました。 ソース #include <gtk/gtk.h> int main(int argc,char *argv[]){ GtkWidget *window; gtk_init(&argc, &argv); window = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_widget_show(window); gtk_main(); return 0; } インストールしたパッケージ libgtk-2.0 pkg-config0.21-1build1 gcc-4.1 gcc-4.1-base これをコンパイルするときに cc -o base base.c 'pkg-config --cflags --libs gtk+-2.0' でやると cc: pkg-config --cflags --libs gtk+-2.0: No such file or directory base.c:1:21: error: gtk/gtk.h: No such file or directory base.c: In function ‘main’: base.c:4: error: ‘GtkWidget’ undeclared (first use in this function) base.c:4: error: (Each undeclared identifier is reported only once base.c:4: error: for each function it appears in.) base.c:4: error: ‘window’ undeclared (first use in this function) base.c:8: error: ‘GTK_WINDOW_TOPLEVEL’ undeclared (first use in this function) ちなみに単体でpkg-config --cflags --libs gtk+-2.0でコマンドを打った場合、 -I/usr/include/gtk-2.0 -I/usr/lib/gtk-2.0/include -I/usr/include/atk-1.0 -I/usr/include/cairo -I/usr/include/pango-1.0 -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include -I/usr/include/freetype2 -I/usr/include/libpng12 -lgtk-x11-2.0 -lgdk-x11-2.0 -latk-1.0 -lgdk_pixbuf-2.0 -lm -lpangocairo-1.0 -lfontconfig -lXext -lXrender -lXinerama -lXi -lXrandr -lXcursor -lXfixes -lpango-1.0 -lcairo -lX11 -lgobject-2.0 -lgmodule-2.0 -ldl -lglib-2.0 となっていました。 どなたか解決方法をご存知のかたはいませんでしょうか?

  • cygwinのgccで正常にコンパイルできない。

    cygwinのgccで正常にコンパイルできない。 cygwinのvimで、以下のプログラムを書きました。 ------------------------------------------------------------- #include <stdio.h> int main(void) { int no; printf("Please input something:"); scanf("%d", &no); printf("It is %d that you input it:\n", no); return (0); } ------------------------------------------------------------- それからgccでコンパイルしました。 コマンドは以下の通りです。 $ gcc test.c すると以下のエラーが出ました。 test.c:10:9: warning: unknown escape sequence: '\033' このようにコンパイルできない状態です。 どのようにすると正常にコンパイルできるようになるでしょうか?

  • コンパイルエラーの原因がわからず困っています。

    こんにちわ。いつもお世話になっております。 自分で構造体を定義して、それを使ってみたのですがコンパイルエラーが出てしまいます。何がいけないのでしょうか。 以下がそのプログラムです。 struct list { struct list *prev; struct in_addr ip_src, ip_dst; u_short th_sport; u_short th_dport; struct list *next; }; void main (u_char * args, const struct pcap_pkthdr *header, const u_char * packet) { static int count = 1; const sturct list *flow; return; } 以上です。 エラー内容は test.c: In function ‘main’: test.c:17: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘list’ test.c:17: error: ‘list’ undeclared (first use in this function) test.c:17: error: (Each undeclared identifier is reported only once test.c:17: error: for each function it appears in.) test.c:17: error: ‘flow’ undeclared (first use in this function) 以上です。 どんな些細な意見でも構いませんので、何か気が付かれたら教えて頂けないでしょうか。どうぞよろしくお願いします。

  • gcc(cygwin)でのstd::wstringの利用方法

    gccでstd::wstringを使用すると以下のようなエラーとなり、コンパイルが通りません。gccでのコンパイル方法を教えてください。gccのバージョンは3.4.4です。 error: `wstring' undeclared (first use this function)

  • gccでコンパイル時のエラー

    // test.cpp #include <stdio> using namespace std; int main(int argc, char *argv[]) { printf("test\n"); return 0; } 上記コードをコンパイルしたいのですが make -k g++ -g -O2 -Wall -I. -c test.cpp -o test.obj test.cpp:2:17: stdio: No such file or directory test.cpp: In function `int main(int, char**)': test.cpp:7: error: `printf' was not declared in this scope test.cpp:7: warning: unused variable 'printf' make: *** [test.obj] Error 1 make: Target `all' not remade because of errors. となります。 #include <stdio> using namespace std; を #include <stdio.h> // using namespace std; にすれば正常に終了するのですがなぜでしょうか? gccはMingw5.1.6からインストールしたもので、 バージョンはgcc3.4.5です。 Meadow上から実行しました。 回答よろしくお願い致します。

  • 初心者です。C言語でクイズを作っています。

    下のようなプログラムを作ってみたのですが、 コンパイルエラーがでます。 どうか教えて頂けないでしょうか? これは、コンパイルエラーの文です。 $ gcc -o quiz2.exe quiz2.c quiz2.c: In function `main': quiz2.c:10: `y' undeclared (first use in this function) quiz2.c:10: (Each undeclared identifier is reported only once quiz2.c:10: for each function it appears in.) quiz2.c:29: parse error before `}' quiz2.c:39: parse error before `}' quiz2.c:46: parse error at end of input そして、このようなソースを作りました。 #include <stdio.h> main() { char ans, ans3; int ans2; printf("クイズを出題します。 y/n -->"); ans = getchar(); if(ans==y) { printf("目*花*歯があるのに口がないのなに?"); printf("1:包丁 2:植物 3:ロボット"); scanf("%d",&ans2); if(ans2==2) { printf("正解"); } if(ans2==1||ans2==3) { printf("ハズレ もう一度する? y/n"); ans3 = getchar(); if(ans3==y) { return(1) } else { printf("ゲームを終了"); } } else { printf("半角数字の1~3を入力して"); return(1) } } else { printf("またチャレンジしてね"); } } /*尚、環境はcygwinのgccを使っています。*/ 文字数が足りないので、printfの中などは少し省いてあります。

  • C言語、関数、ポインタ、エラー見つけられません。

    いつも大変お世話になり誠にありがとうございます。 標記の件。 エラーが見つけられません。 どうかアドバイスをください。       記 コード #include <stdio.h> double avg(int *pT); int main(void) { int rest[5]; int i; double ans; printf("5人のテストの点数を入力してください。\n"); for(i=0; i<5; i++){ scanf("%d", &test[i]); } ans = avg(test); printf("5人の平均点は%lf点です。\n", ans); return 0; } /*avg関数の定義*/ double avg(int *pT) { int i; double sum; sum = 0.0; for(i=0; i<5; i++){ sum += pT[i]; } return sum/5; } コンパイラーエラー C:\MinGW>gcc text19.c -o text19 text19.c: In function 'main': text19.c:14:22: error: 'test' undeclared (first use in this function) scanf("%d",&test[i]); ^~~~ text19.c:14:22: note: each undeclared identifier is reported only once for each function it appears in 14行目にエラーがあるのかな?と思いますが 間違っていないようです。 ご多忙中恐れ入ります。 ご回答の程宜しくお願い申し上げます。

  • MinGWとmsysでGTK+の開発環境を整えたい

    WindowsXP上で、コンパイラにMinGWを用いてGTK+2.0を用いたGUIアプリケーションの開発を行いたいと思っています。 しかし、GTK+2.0のサンプルソースのコンパイルが通りません。 コマンドとそのエラーは以下の通りです。 どうもヘッダーが見つからないと言っているようですが、ヘッダーをコンパイラのincludeフォルダに入れても駄目でした。 いれたGTK+はGlade等、全てがパックになっているものでした。インストール時にmsysを認識してくれていたので、勝手に設定をしてくれるのかと思ったのですが…。 $ gcc hello_gtk.c 'pkg-config gtk+-2.0 --cflags' hello_gtk.c:1:21: gtk/gtk.h: No such file or directory hello_gtk.c: In function `main': hello_gtk.c:5: error: `GtkWidget' undeclared (first use in this function) hello_gtk.c:5: error: (Each undeclared identifier is reported only once hello_gtk.c:5: error: for each function it appears in.) hello_gtk.c:5: error: `window' undeclared (first use in this function) hello_gtk.c:6: error: `label' undeclared (first use in this function) hello_gtk.c:10: error: `GTK_WINDOW_TOPLEVEL' undeclared (first use in this function) gcc.exe: pkg-config gtk+-2.0 --cflags: No such file or directory どうすれば、コンパイルできるようになるのでしょう?

  • gcc コンパイル killed

    gccでC言語で書いたコードをコンパイルしたところ コンパイルには成功したのですが 実行してみると killed と表示されてしまいます #include <stdio.h> int main(){ printf("TEST\n"); return 0; } こんな簡単なものでもコンパイル後、実行すると killedと表示されTESTと表示されません $gcc test.c -o test $./test killed $ この様になります。ldid -Sでコンパイルされたファイルを直すことは可能なのですが どのコードでも毎回、killedという表示になってしまいます 毎回毎回コンパイル後にldidコマンドを使用するのも嫌なので直したいのですが "再インストール以外"の方法で直してみたいです。今後、同じようなエラーが起きた際、役にも立ちますし、Cについての勉強にもなりますので (再インストールでは詳しい原因がわかりません) 原因をご存知の方がいましたらよろしくお願いします。(Linux)