在file用于检查某些文件类型时,我注意到它似乎错误地将 C++ 文件标记为 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
Run Code Online (Sandbox Code Playgroud)
为什么它可以正确识别头文件,但不能正确识别 cpp 文件?
从手册页 file命令的,
file 命令实际上执行了 3 次确定文件类型的测试。
文件系统测试基于检查 stat(2) 系统调用的返回。
幻数测试用于检查具有特定固定格式数据的文件。
语言测试查找可以出现在文件前几个块中的任何位置的特定字符串 (cf names.h)。例如,关键字 .br 表示该文件很可能是 troff(1) 输入文件,就像关键字 struct 表示 C 程序一样。
file命令的输出通常基于任何成功的测试的结果。
现在,假设C++程序是这样启动的,第三次测试成功,
#include <iostream.h>
bla
bla
Run Code Online (Sandbox Code Playgroud)
根据第三个测试,尽管我们手头有一个CPP程序,但关键字#include特别指定它是C 类程序。现在,当我检查时,
$ file example.cpp
example.cpp: ASCII C program text
Run Code Online (Sandbox Code Playgroud)
现在,面向对象的概念是特定于 C++ 的。让我们创建一个特定于C++的文件。
我开始我的 C++ 程序,
Class something
{
}
bla
bla
Run Code Online (Sandbox Code Playgroud)
现在,当我发出
$ file example.cpp
Run Code Online (Sandbox Code Playgroud)
输出是,
example.cpp: ASCII C++ program text
Run Code Online (Sandbox Code Playgroud)