Почему я должен назвать свой текстовый файл < что-то > .cpp, чтобы скомпилировать программу на C ++ из командной строки?

Я изучаю компиляцию / запуск простых программ на C ++ из оболочки bash (в Ubuntu 12.04). Будучи новичком в Linux в целом, у меня фактически есть пара вопросов.

Во-первых, кажется, что Ubuntu / Linux не отображает типы файлов в формате .abc, как это делает Windows. Я понял, что ОС не нужно это расширение, чтобы знать тип файла, но не удобнее ли пользователю-человеку сразу же прочитать эту информацию? Как я должен знать, какой тип у данного файла?

Во-вторых (и соответственно), если Linux, похоже, не заботится о расширении имени файла информацией о типе, почему это происходит, когда я создаю простой C ++? запрограммируйте в gedit и просто назовите его «test», компиляция не работает (используя gtit-компилятор g ++), но когда я называю файл «test.cpp», он работает?

Нужно ли Linux / заботиться о расширении или нет? Я чувствую, что получаю смешанные сообщения здесь, и я действительно хотел бы понять.

5
задан 13 December 2013 в 17:48

4 ответа

У вас нет для присвоения имени файлу определенного суффикса, однако компиляторы gcc / g ++ используют суффикс в качестве ярлыка, чтобы решить, как обрабатывать файлы. Если вы хотите использовать другой суффикс (или без суффикса), вы можете указать компилятору, какой тип файла это явно, используя опцию командной строки -x - см. Ответ на этот аналогичный предыдущий вопрос Компиляция исходного файла C без .c Достаточно

0
ответ дан 13 December 2013 в 17:48

В любой операционной системе то, что вы сказали, правильно: расширение файла не определяет тип файла. Расширения используются, чтобы сообщать программам (и людям), какого типа файл будет. Как правило, файлы без расширения являются двоичными файлами, однако это не является строгим правилом.

Имеет ли значение, имеет ли файл расширение? Это зависит от программы. Некоторые, такие как OpenOffice или Gedit, не будут задавать никаких вопросов о расширении имени файла, но все равно откроют файл независимо от того, какая ошибка может возникнуть. Более умные программы, такие как g ++, проверяют расширение имени файла перед анализом, чтобы предотвратить человеческую ошибку. Кроме того, существуют программы, такие как медиаплееры, которые доверяют вам использовать правильное расширение для файла и использовать расширение для определения способа запуска.

В заключение можно сказать, что Linux не очень заботится о расширениях имен файлов. Это позволяет людям и программам принимать обоснованные решения о присвоении имен своим файлам. Расширения имеют свое место, но они не являются определяющими в отношении того, что такое файл.

0
ответ дан 13 December 2013 в 17:48
  • 1
    I' d нравится отмечать этот поток, как РЕШЕНО, но как обычно, that' s самая твердая часть целого процесса. There' s предполагаемый быть значком Thread Tools, но там isn' t – Leo Simon 7 June 2015 в 08:13

Пользователь-человек, чтобы иметь возможность сразу же прочитать эту информацию?

Помните, что Linux - это Unix-подобная операционная система. С древних времен * nix использовал разные методы для определения того, что такое файл, например, file, шебанг, волшебный бит и т. Д. Разработка UNIX / Linux под DOS, CP / M, которую делает наследие Windows. Поэтому расширения, как правило, менее значимы для большинства утилит и инструментов Linux.

Как я должен знать, какой тип у данного файла?

Вы просите систему сообщить вам. Для этого используется file, и большинство (если не все) файловых менеджеров используют магический бит, чтобы определить, о чем идет речь.

Если Linux, похоже, не заботится о расширении имени файла с помощью информации о типе, то почему, когда я создаю простую программу на C ++ в gedit и просто называю ее «test», компиляция не работает (используя компилятор g ++), но когда я называю файл test.cpp, он работает?

Это для мобильности, и так как они были такими с самого начала. Поскольку Linux не заботится о расширении, а Windows заботится, то они заставляют обе ОС распознавать, о чем идет речь.

0
ответ дан 13 December 2013 в 17:48

Unix был создан с идеей взаимодействия файлов, дескрипторов, разрешений, каналов, ссылок, программ и т. Д. Предполагалось, что программисты все сделают правильно. Таким образом, вся ветка Linux в Unix построена на одной идее, а не на строгих расширениях типов, используемых в качестве основы для организации системы. Просто так получилось, что ранние компиляторы c, которые использовались для сборки unix, имели расширения файлов, чтобы было проще использовать взаимодействие с объектными, исходными и скомпилированными файлами. Так что они застряли.

Windows не использует расширения типов, чтобы помочь пользователям, но потому что структуры, которые она использует, гораздо менее гибки.

Наконец, gnu / linux / ubuntu также изучают опыт необходимости, и вы должны позитивно относиться к различиям между ними и Windows, потому что вы действительно узнаете, как работают компьютеры, делая это.

0
ответ дан 13 December 2013 в 17:48

Другие вопросы по тегам:

Похожие вопросы: