3

(フォルダーの Makefile を実行する) Emacs から .cpp ファイルをコンパイルするM-x compileと、コンパイル バッファーに次のように表示されます (コンパイル モードで表示されます)。

In file included from: /path/to/file1:60,
  from /path/to/file2.h:15,
  from /path/to/file3.cpp:16: 

/path/to/file4.h:28:2:#warning このファイルには、非推奨または時代遅れのヘッダーが少なくとも 1 つ含まれています。これらのヘッダーは、将来予告なしに削除される可能性があります。代わりに、同等の機能を持つ非推奨でないインターフェースを使用してください。置換ヘッダーとインターフェースのリストについては、ファイルを参照してくださいbackward_warning.h。この警告を無効にするには、-Wno-deprecated.

  • 実際の警告メッセージは別として、このトレースをどのように理解すればよいですか? つまり、どのファイルが警告を生成しましたか? ( file1file2file3またはfile4)?
  • また、行の後にコンマ、file2行の後にコロンがあるのはなぜですか?file3行にfile4は 2 つのコロンで区切られた 2 つの数字が含まれています。

私は Emacs を使用24.2.1していgcc-4.4.5-x86_64ます。

4

3 に答える 3

4

実際に警告を引き起こした構成 (#warningこの場合はプリプロセッサ ディレクティブ) はfile4. その上のものはスタックのトレースで、最も内側#includeから 1 つが最初です。file3file2file1file4

gcc は、診断をトリガーした構造の列番号を認識すると、ファイル名、コロン、行番号、別のコロン、および列番号を、file4行に表示されているように出力します。#最初の数字は行番号 (28) で、2 番目の数字は列番号です (この場合、列 2にあることがわかります#warning)。gccが列番号を知らない場合、ファイル名、コロン、および行番号を出力するだけです。ディレクティブ#includeの正確な列を記録する必要がないため、これはスタックの場合です。#includeEmacs のコンパイル モードは、これらの両方の構文を解析する方法を理解しています。C-x  `診断をページングするために、使用可能な列番号がある場合、Emacs はカーソルを適切な列に配置します。

これらのレポートの末尾にあるコロンとコンマは、英語の句読点規則に準拠するためのものです。それらは何の意味もありません。

于 2012-10-09T19:28:37.827 に答える
2
  1. 警告は、file4.h の 28 行目で生成されました。

  2. コンマはリストの途中にあるため、コロンはリストの終わりを示します。2 つの数字は、行番号と列番号です。

于 2012-10-09T19:25:58.990 に答える
1

実際にそのコンパイルパスを表示して、次のように言っています。

in column 2 of line 28 of file4.h
that included from file1.h(line 60)
that included from file2.h(line 15)
that included from file3.cpp(line 16)
there was a warning ...

すべてのコンパイラはこのトラックを保持する必要があり、GCC がスマートか何かとは何の関係もありません!! コンパイラはコンパイルのみをfile3.cpp行い、他のすべてのファイルはこのファイルからのインクルードの結果としてのみ解析されるためです。

于 2012-10-09T19:44:56.107 に答える