Por que eu tenho que nomear meu arquivo de texto something.cpp para poder compilar um programa C ++ a partir da linha de comando?

5

Estou explorando a compilação / execução de programas C ++ simples a partir do bash shell (no Ubuntu 12.04). Sendo novo no Linux em geral, tenho algumas perguntas.

Primeiro, parece que o Ubuntu / Linux não exibe tipos de arquivos no formato .abc, como o Windows. Eu entendo que o sistema operacional não precisa dessa extensão para saber o tipo de arquivo, mas não é mais conveniente para o usuário humano ser capaz de ler essa informação em um piscar de olhos? Como eu deveria saber o tipo de um determinado arquivo?

Segundo (e relacionado), se o Linux parece não se importar em estender um nome de arquivo com as informações de tipo, por que quando eu crio um programa C ++ simples no gedit e o chamo de 'teste', a compilação não trabalho (usando o compilador g ++ btw), mas quando eu nomeio o arquivo 'test.cpp', ele funciona?

O Linux precisa / se preocupa com a extensão ou não? Eu sinto que estou recebendo mensagens confusas aqui, e eu realmente gostaria de entender.

    
por ghostRepeater 13.12.2013 / 00:38

4 respostas

4

Você não tem para nomear seu arquivo com um sufixo específico; no entanto, os compiladores gcc / g ++ usam o sufixo como um atalho para decidir como processar os arquivos. Se você quiser usar um sufixo diferente (ou nenhum sufixo), poderá dizer ao compilador que tipo de arquivo ele está usando explicitamente a opção de linha de comando -x - veja a resposta a esta pergunta anterior semelhante Compilando o arquivo de origem C sem .c suffic

    
por steeldriver 13.12.2013 / 00:57
3

Em qualquer sistema operacional, o que você disse está correto: a extensão de um arquivo não determina o tipo de arquivo. Extensões são usadas para dizer aos programas (e humanos) o que esperar do tipo do arquivo. Geralmente, arquivos sem extensão são binários, no entanto, isso não é uma regra estrita.

Importa se um arquivo tem uma extensão? Depende do programa. Alguns, como o OpenOffice ou o Gedit, não farão perguntas sobre a extensão do nome do arquivo, mas abrirão o arquivo de qualquer maneira, independentemente do erro que possa ocorrer. Programas mais inteligentes, como o g ++, examinarão a extensão do nome do arquivo antes da análise para evitar erros humanos. E há programas como players de mídia que confiam em você para usar a extensão correta de um arquivo e usar a extensão para determinar como executar.

Em conclusão, você poderia dizer que o Linux não se importa muito com extensões de nome de arquivo. Isso deixa para os humanos e programas tomar decisões informadas sobre como nomear seus arquivos. Extensões têm seu lugar, mas elas não são determinantes sobre o que é um arquivo.

    
por Richard 13.12.2013 / 01:05
2
  

usuário humano pode ler rapidamente essas informações?

Lembre-se de que o Linux é um sistema operacional semelhante ao Unix. Desde os tempos antigos o * nix usou métodos diferentes para identificar o que é um arquivo, como file , o shebang, o bit mágico, etc. Desenvolvimento UNIX / Linux como DOS, CP / M que o Windows faz. Portanto, as extensões são geralmente menos significativas para a maioria dos utilitários e ferramentas do Linux.

  

Como devo saber que tipo é um determinado arquivo?

Você pede ao sistema para lhe dizer. Para isso é file e a maioria (se não todos) gerenciadores de arquivos usam o bit mágico para identificar o que é um arquivo.

  

se o Linux parece não se importar em estender um nome de arquivo com as informações de tipo, porque é que quando eu crio um programa C ++ simples em gedit e o chamo de 'test', a compilação não funciona (usando o compilador g ++ btw), mas quando eu nomeio o arquivo 'test.cpp', ele funciona?

Isto é para portabilidade e desde que eles eram assim desde o início. Como o Linux não se importa com a extensão, mas com o Windows, eles fazem com que ambos os SO reconheçam o que é o arquivo.

    
por Braiam 13.12.2013 / 15:19
1

O Unix foi criado com a idéia de arquivos, descritores, permissões, canais, links e programas, etc. interagindo uns com os outros. Supunha-se que os programadores fariam certo. Assim, toda a ramificação de Linux do Unix é construída sobre a mesma ideia, não extensões de tipo estritas usadas como base para a organização do sistema. Acontece que é o caso de os primeiros compiladores c que foram usados para construir unix terem extensões de arquivo para facilitar a interação com objetos, fontes e arquivos compilados. Então eles estão presos.

O Windows não usa extensões de tipo para ajudar usuários humanos, mas porque as estruturas usadas são bem menos flexíveis.

Por fim, o gnu / linux / ubuntu também são experiências de aprendizado de necessidade e você deve ter uma atitude positiva em relação às diferenças entre eles e o Windows, porque você realmente aprenderá como os computadores funcionam fazendo isso.

    
por comrademike 13.12.2013 / 15:05