|
||
解説: 実行時、エラーが出た行を特定したいとき、皆さんはどのように調べていますか? いろいろ手立てはあると思いますが、今回はプリプロセッサ変数を使ってみます。 プリプロセッサ変数は、プリプロセッサによって任意に定義、置換されています。 その中から、今回はエラーの出た行を特定するプリプロセッサ変数 __LINE__ を使ってみます。 ちょっと寄り道: プリプロセッサは、コンパイルの前に前処理を行なうプログラムのことです。 プリプロセッサ変数がどのように置換されるのか、詳細はインターネットなどで調べてみてください。 使用例: 今回の例は、コーディングからエラーの出る行を特定します。 エラーを発生させるため、実在しないファイルを開いています。 コンポーネントは、Label を適当に配置するだけです。 流れとしては、fopen で実在しないファイルを開きます。エラーが出ますので、用意したプリプロセッサ変数 __LINE__ でエラー行を特定します。 結果は Label1 に表示しています。 他のプリプロセッサ変数も試してみてください。 //------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { FILE *fp; int line = __LINE__ + 1; fp = fopen("test.txt", "r");// 18 行 if (fp == NULL) { char buf[128]; sprintf(buf, "%d 行目でエラー発生\n", line); Label1->Caption = buf; return; } fclose(fp); } //------------------------------------------------------------------- |