“file”命令混淆了 C 和 C++

“file”命令混淆了 C 和 C++

当使用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

为什么它可以正确识别头文件,但不能正确识别cpp文件?

答案1

从命令的手册页来看file

file命令实际上执行了 3 个测试来确定文件类型。

第一次测试

文件系统测试基于检查 stat(2) 系统调用的返回结果。

第二次测试

幻数测试用于检查具有特定固定格式数据的文件。

第三次测试

语言测试查找可能出现在文件前几个块中任何位置的特定字符串(参见 name.h)。例如,关键字 .br 表示该文件很可能是 troff(1) 输入文件,就像关键字 struct 表示 C 程序一样。

命令的输出file通常基于任何成功测试的结果。

现在,假设 C++ 程序像这样启动,并且第三次测试成功,

#include <iostream.h>
bla
bla

根据第三个测试,关键字#include特别指定它的类型C程序虽然我们有一个消费者保护计划程序在手。现在,当我检查时,

$ 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

相关内容