"file"コマンドがCとC ++を混同する

"file"コマンドがCとC ++を混同する

以下を使用して特定のファイル形式を確認すると、fileC ++ファイルがCファイルとして正しく表示されないことがわかりました。

$ file User.*
User.cpp: C source, ASCII text
User.h:   C++ source, ASCII text
User.o:   ELF 64-bit LSB relocatable, x86-64, version 1 (SYSV), not stripped

ヘッダファイルは正しく認識されますが、cppファイルが認識されないのはなぜですか?

答え1

コマンドのマニュアルページでfile

fileこのコマンドは、実際にファイル形式を決定するために3つのテストを実行します。

最初のテスト

ファイルシステムテストは、stat(2) システムコールの戻り結果チェックに基づいています。

2回目のテスト

マジックナンバーテストは、特定の固定形式のデータを含むファイルを確認するために使用されます。

3回目のテスト

言語テストは、ファイルの最初の数ブロック内のどこにでも表示できる特定の文字列を見つけます(name.hを参照)。たとえば、structキーワードがCプログラムを表すように、.brキーワードは、ファイルがtroff(1)入力ファイルである可能性が最も高いことを示します。

コマンドの出力はfile通常、成功したテスト結果に基づいています。

それでは、C ++プログラムがこのように始まり、3回目のテストが成功したとしましょう。

#include <iostream.h>
bla
bla

3番目のテストでは、キーワードは#includeそのタイプを具体的に指定します。プログラムがありますが、消費者保護計画プログラムを持っています。今確認してみると、

$ file example.cpp

example.cpp: ASCII C program text

オブジェクト指向の概念はC ++に固有のものです。特定のファイルを作成しましょうC++

C++ プログラムを起動します。

Class something
{
}
bla
bla

今発行するとき

$ file example.cpp

出力は、

example.cpp: ASCII C++ program text

関連情報