1

プログラムがコンパイルに失敗したステップ(プリプロセッサ、コンパイル、リンク)をどのように知ることができますか?

たとえば、3つのソースファイルのプログラムを作成しました。3つすべてに、すべてのソースファイルのすべてのプロトタイプを含むa.c ,b.c, c.cヘッダーファイルが含まれていましたが、ヘッダーファイルに1つの関数も実装しました。h.h間違っていることはわかっていますが、プログラムがクラッシュしたのはどの段階でしたか、リンクかコンパイルか、エラーメッセージが表示されました。これは、問題がリンク段階にあるということですか?(それ以外の場合は、コンパイラからの間違いに赤い下線が表示されますか?)

リンクについてはどこで読むことができますか?ヘッダーとソースファイルおよびリンクエラーに関してすべきでないことは何ですか?

(私はLinuxでEclipseを使って作業しています)

4

2 に答える 2

2

コンパイルとリンクを分離することで、エラーの場所を見つけます。プリコンパイラによるエラーは異常であり、コンパイル中にも検出されます。コマンドラインでのコンパイルのしくみは次のとおりです。

コンパイル手順:

gcc -c -o a.o -pedantic -Wall a.c 
gcc -c -o b.o -pedantic -Wall b.c 
gcc -c -o c.o -pedantic -Wall c.c 

リンクステップ:

gcc a.o b.o c.o -o prog

もちろん、必要な他のフラグを指定する必要があります(たとえば、ライブラリにリンクするための-lなど)。

次に、エラーと警告(!)を注意深く読むと、問題が見つかります。

于 2012-07-20T14:41:23.653 に答える
1

プログラムは、実行可能な実行可能ファイルを生成するためにプログラムを前処理、コンパイル、およびリンクした後でのみクラッシュします。クラッシュは実行時エラーです。

プリプロセッサ/コンパイル/リンクの再作成

作業しているプラ​​ットフォーム/環境を指定していませんが、Linux / Unix環境では、通常はでメッセージが表示されるため、リンカーで問題が発生しているかどうかを簡単に判断できますld

コンパイルエラーは通常、構文に関連しており、その方法で簡単に識別できます(たとえば、親の不一致、セミコロンの欠落など)(ただし、原則として、常に最高の警告レベルでコンパイルしてから、意識的にどの警告を決定することをお勧めします無視するメッセージ。)

私はそれを試すことができるシステムにいないので、プリプロセッサが特定の簡単に識別できるエラー/警告メッセージをスローするかどうか、またはそれらがコンパイラに渡されてそれで吐き出されるかどうかはわかりませんステージ。

これらの手順はいずれもプログラムをクラッシュさせません。クラッシュする場合は、これらのすべての手順が正常に完了した後にのみ発生します。

于 2012-07-20T14:30:07.017 に答える