5 votes

Pourquoi dois-je nommer mon fichier texte <something>.cpp pour compiler un programme C++ à partir de la ligne de commande?

Je suis en train d'explorer la compilation/l'exécution de programmes C++ simples depuis le shell bash (sous Ubuntu 12.04). Étant nouveau sous Linux en général, j'ai en fait quelques questions.

Premièrement, il semble qu'Ubuntu/Linux n'affiche pas les types de fichiers au format .abc, comme le fait Windows. Je comprends que le système d'exploitation n'a pas besoin de cette extension pour connaître le type de fichier, mais n'est-il pas plus pratique pour l'utilisateur humain de pouvoir lire ces informations en un coup d'œil ? Comment suis-je censé savoir quel type de fichier est donné ?

Deuxièmement (et de manière connexe), si Linux semble se moquer d'étendre le nom d'un fichier avec des informations sur le type, pourquoi est-ce que lorsque je crée un programme C++ simple dans gedit et que je l'appelle simplement 'test', la compilation ne fonctionne pas (en utilisant le compilateur g++ d'ailleurs), mais lorsque je nomme le fichier 'test.cpp', cela fonctionne ?

Est-ce que Linux a besoin/se préoccupe de l'extension, ou pas ? J'ai l'impression de recevoir des messages contradictoires ici, et j'aimerais vraiment comprendre.

5voto

steeldriver Points 118154

Vous n'avez pas besoin de nommer votre fichier avec un suffixe particulier, cependant, les compilateurs gcc/g++ utilisent le suffixe comme un raccourci pour décider comment traiter les fichiers. Si vous voulez utiliser un suffixe différent (ou pas de suffixe), vous pouvez indiquer explicitement au compilateur le type de fichier qu'il s'agit en utilisant l'option en ligne de commande -x - voir la réponse à cette question précédente similaire Compiler un fichier source C sans suffixe .c

3voto

paulrehkugler Points 165

Dans n'importe quel système d'exploitation, ce que vous avez dit est correct : l'extension d'un fichier ne détermine pas le type de fichier. Les extensions sont utilisées pour indiquer aux programmes (et aux humains) à quoi s'attendre en termes de type de fichier. En général, les fichiers sans extension sont des binaires, cependant, ce n'est pas une règle stricte.

Est-ce important qu'un fichier ait une extension ? Cela dépend du programme. Certains, comme OpenOffice ou Gedit, ne poseront aucune question sur l'extension du nom de fichier, mais ouvriront quand même le fichier, quelles que soient les erreurs possibles. Des programmes plus intelligents comme g++ vont examiner l'extension du nom de fichier avant de l'analyser pour éviter les erreurs humaines. Et puis il y a des programmes comme les lecteurs multimédias qui vous font confiance pour utiliser la bonne extension pour un fichier et utilisent cette extension pour déterminer comment le exécuter.

En conclusion, on pourrait dire que Linux se soucie peu des extensions de nom de fichier. Cela laisse aux humains et aux programmes le soin de prendre des décisions éclairées sur le nommage de leurs fichiers. Les extensions ont leur place, mais elles ne déterminent pas ce qu'est un fichier.

2voto

Braiam Points 64282

l'utilisateur humain être capable de lire ces informations d'un coup d'oeil?

N'oubliez pas que Linux est un système d'exploitation de type Unix. Depuis les temps anciens *nix a utilisé différentes méthodes pour identifier de quoi parle un fichier, comme file, le shebang, le magic bit, etc. Le développement UNIX/Linux est comme DOS, CP/M, l'héritage de Windows. Ainsi, les extensions sont généralement moins importantes pour la plupart des utilitaires et outils Linux.

Comment suis-je censé savoir de quel type est un fichier donné?

Vous demandez au système de vous le dire. Pour cela, c'est file et la plupart (si ce n'est pas tous) des gestionnaires de fichiers utilisent le magic bit pour identifier de quoi parle un fichier.

si Linux semble ne pas se soucier d'étendre un nom de fichier avec les informations de type, pourquoi est-ce que lorsque je crée un simple programme C++ dans gedit et que je l'appelle simplement 'test', la compilation ne fonctionne pas (en utilisant le compilateur g++ d'ailleurs), mais lorsque je nomme le fichier 'test.cpp', ça fonctionne?

C'est pour la portabilité et parce qu'ils ont été comme ça depuis le début. Comme Linux ne se soucie pas de l'extension, mais Windows si, alors ils font en sorte que les deux OS reconnaissent de quoi parle le fichier.

1voto

comrademike Points 784

Unix a été créé avec l'idée de fichiers, descripteurs, permissions, tubes, liens et programmes, etc., interagissant les uns avec les autres. On supposait que les programmeurs feraient les choses correctement. Ainsi, toute la branche linux d'Unix est basée sur la même idée, pas des extensions strictes utilisées comme base pour l'organisation du système. Il se trouve simplement que les premiers compilateurs C utilisés pour construire Unix avaient des extensions de fichiers pour rendre l'interaction avec les fichiers objet, source et compilés plus facile à utiliser. Elles sont donc restées.

Windows n'utilise pas d'extensions de type pour aider les utilisateurs humains, mais parce que les structures qu'il utilise sont beaucoup moins flexibles.

Enfin, gnu/linux/ubuntu sont aussi des expériences d'apprentissage par nécessité et vous devriez avoir une attitude positive envers les différences entre eux et Windows, car vous allez vraiment apprendre comment les ordinateurs fonctionnent en le faisant.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X