"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) 시스템 호출의 반환 결과 검사를 기반으로 합니다.

두 번째 테스트

매직 넘버 테스트는 특정 고정 형식의 데이터가 포함된 파일을 확인하는 데 사용됩니다.

세 번째 테스트

언어 테스트는 파일의 처음 몇 블록 내 어디에나 나타날 수 있는 특정 문자열을 찾습니다(name.h 참조). 예를 들어, struct 키워드가 C 프로그램을 나타내는 것처럼 .br 키워드는 파일이 troff(1) 입력 파일일 가능성이 가장 높다는 것을 나타냅니다.

명령의 출력은 file일반적으로 성공적인 테스트 결과를 기반으로 합니다.

이제 C++ 프로그램이 이렇게 시작하고 세 번째 테스트가 성공했다고 가정해 보겠습니다.

#include <iostream.h>
bla
bla

세 번째 테스트에 따르면 키워드는 #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

관련 정보