comando “arquivo” confuso C & C ++

3

Ao usar file para verificar alguns tipos de arquivo, notei que parece rotular incorretamente os arquivos C ++ como arquivos 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

Por que está identificando corretamente o arquivo de cabeçalho, mas não o arquivo cpp?

    
por Seamus 01.07.2014 / 21:39

1 resposta

9

Da página man do comando file ,

O comando

file na verdade executa 3 testes para determinar o tipo de arquivo.

Primeiro teste

The filesystem tests are based on examining the return from a stat(2) system call.

Segundo teste

The magic number tests are used to check for files with data in particular fixed formats.

Terceiro teste

The language tests look for particular strings (cf names.h) that can appear anywhere in the first few blocks of a file. For example, the keyword .br indicates that the file is most likely a troff(1) input file, just as the keyword struct indicates a C program.

A saída do comando file geralmente é baseada no resultado de qualquer um dos testes bem-sucedidos.

Agora, assumindo que o programa C ++ é iniciado assim e o terceiro teste é bem-sucedido,

#include <iostream.h>
bla
bla

De acordo com o terceiro teste, a palavra-chave #include especifica especificamente que é do tipo C , embora tenhamos um programa CPP em mãos. Agora, quando eu verificar,

$ file example.cpp

example.cpp: ASCII C program text

Agora, os conceitos de orientação a objetos são específicos do C ++. Vamos criar um arquivo específico para o C ++ .

Eu inicio meu programa C ++ como

Class something
{
}
bla
bla

Agora, quando eu emitir

$ file example.cpp

A saída é

example.cpp: ASCII C++ program text
    
por 01.07.2014 / 21:58