2011-12-28 7 views
-3

gccでCファイルをコンパイルしたいのですが、私の質問は次のとおりです。gccのコードに間違いがあると(たとえば、セミコロンを忘れるなど)エラー?gccでデバッグ

おかげ

+1

はい、場合あなたは構文エラーがあります。あなたのコードはコンパイルされません。もちろん、構文エラーを引き起こさないミスをする方法はたくさんあります。 –

+0

私はあなたの質問をどのように解釈しましたか?潜在的なエラーのあるCプログラムをコンパイルしたいとします。コンパイルして何が起こるのを見てみませんか?編集:ちょうどあなたが知っているので、gccは、エラーが存在する行を与えます。 – itdoesntwork

+0

私は別の質問を@itdoesntwork ...と解釈しました。「違反コードを見ることはできますか?」 – BRFennPocock

答えて

1

gccは、エラーが発生した(おおよその)ラインと位置をプリントアウトし、そのファイルになります。

ただし、いいえ、gccはコードを繰り返しません。ファイルを開いてその行に移動する必要があります。

通常、統合開発環境では、gcc出力のエラー参照をクリックして、その行に直接移動することができます。これは(少なくとも)Eclipse、Anjuta、Emacsに当てはまります。

(常に-Wextraを使用)

+0

+1に '-Wextra'を+1しました。しかし、もしあなたが従来のコードを扱っているなら、 '-Wno-sign-compare'でいくつかの警告を抑制する必要があるでしょう。また、 '-Wshadow'を追加すると、私は多くの愚かな間違いから私を救ってくれました。 –

2

gcc診断の形式は、行番号と診断メッセージです。問題のコードは表示されません。

より表現力豊かな診断が必要な場合は、clangコンパイラを試すことができます。 clang診断の形式は、行番号、列番号、診断メッセージ、問題のある箇所を示すマークアップ付きの問題コードの貼り付けです。例えば

、printf文の後に行方不明セミコロンでこのコードを与えられる:ここ

#include <stdio.h> 

int main(void) 
{ 
    int a = 42; 

    printf("%d\n", a) 

    return 0; 
} 

gccclangとの間の診断メッセージの差である:

$ gcc -Wall tst.c 
tst.c: In function ‘main’: 
tst.c:9: error: expected ‘;’ before ‘return’ 
$ clang -Wall tst.c 
tst.c:7:22: error: expected ';' after expression 
    printf("%d\n", a) 
        ^
        ; 
1 diagnostic generated. 
$