Как скомпилировать и выполнить C/C++ в терминале консоли/Mac Unix?

Многие объяснения уже присутствуют, чтобы объяснить, как это происходит и как это исправить, но вы также должны следовать рекомендациям, чтобы избежать NullPointerException вообще.

См. также: A хороший список лучших практик

Я бы добавил, очень важно, хорошо использовать модификатор final. Использование "окончательной" модификатор, когда это применимо в Java

Сводка:

  1. Используйте модификатор final для обеспечения хорошей инициализации.
  2. Избегайте возврата null в методы, например, при возврате пустых коллекций.
  3. Использовать аннотации @NotNull и @Nullable
  4. Быстрое завершение работы и использование утверждений, чтобы избежать распространения нулевых объектов через все приложение, когда они не должен быть пустым.
  5. Сначала используйте значения с известным объектом: if("knownObject".equals(unknownObject)
  6. Предпочитают valueOf() поверх toString ().
  7. Используйте null safe StringUtils StringUtils.isEmpty(null).

131
задан jsejcksn 11 January 2018 в 08:35
поделиться

6 ответов

Если это - простая единственная исходная программа:

make foo

, где исходный файл является foo.c или foo.cpp, и т.д.

, Вам даже не нужен make-файл. Сделайте имеет достаточно встроенных правил встроить Ваш исходный файл в исполняемый файл того же имени, минус расширение.

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

Так для выполнения созданного исполняемого файла foo:

./foo
175
ответ дан 24 November 2019 в 00:13
поделиться

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

Read make руководство , это кажется довольно длинным на первый взгляд, но большинство разделов можно просто скользить. В целом, это взяло меня несколько часов и сделало меня намного более продуктивным.

2
ответ дан 24 November 2019 в 00:13
поделиться

Принятие текущего каталога не находится в пути, синтаксис ./[name of the program].

, Например ./a.out

8
ответ дан 24 November 2019 в 00:13
поделиться

Все выполнение приложений в Unix (Linux, Mac  OS  X, AIX, и т.д.), среда зависит от исполняемого пути поиска.

можно отобразить этот путь в терминале с этой командой:

$PATH эха

На Mac OS X (по умолчанию) это отобразится, следующее двоеточие разделило путь поиска:

/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/X11/bin

, Таким образом, любой исполняемый файл в перечисленных каталогах может выполненным только путем ввода на их имя. Например:

кошка mytextfile.txt

Это выполняет /bin/cat и отображает mytextfile.txt к терминалу.

Для выполнения любой другой команды, которая не находится в исполняемом пути поиска, требует, чтобы Вы квалифицировали путь к исполняемому файлу. Поэтому скажите, что у меня был исполняемый файл под названием MyProgram в моем корневом каталоге на Mac  OS  X я могу полностью определить его как так:

/Users/oliver/MyProgram

, Если Вы находитесь в месте, которое является около программы, которую Вы хотели выполнить, можно квалифицировать имя с частичным путем. Например, если MyProgram был в каталоге /Users/oliver/MyProject я, и я был в своем корневом каталоге, я могу квалифицировать исполняемое имя как это и иметь его, выполнитесь:

MyProject/MyProgram

Или говорит, что я был в каталоге /Users/oliver/MyProject2, и я хотел выполниться /Users/oliver/MyProject/MyProgram, я могу использовать относительный путь как это, для выполнения его:

../MyProject/MyProgram

Так же, если я нахожусь в том же каталоге как MyProgram, я должен использовать относительный путь "текущего каталога". Текущий каталог, в котором Вы находитесь, является символом точки, сопровождаемым наклонной чертой. Например:

./MyProgram

Для определения, какой каталог Вы использующиеся в настоящее время эти pwd команда.

, Если Вы обычно кладете программы на место на Вашем жестком диске, который Вы хотите выполнить, не имея необходимость квалифицировать их имена. Например, если у Вас есть каталог "мусорного ведра" в Вашем корневом каталоге для регулярно используемых сценариев оболочки других программ, может быть мудро изменить Ваш исполняемый путь поиска.

Это может быть, делает легко или созданием или редактированием существующего .bash_profile файл в Вашем корневом каталоге и добавлении строк:

#!/bin/sh
export PATH=$PATH:~/bin

Здесь тильда (~) символ используется в качестве ярлыка для/Users/oliver. Также обратите внимание что удар хеша (#!) строка должна быть первой строкой файла (если это уже не существует). Обратите внимание также, что эта техника требует, чтобы Ваша оболочка входа в систему была ударом (значение по умолчанию на Mac  OS  X и большинство дистрибутивов Linux). Также обратите внимание, что, если Вы хотите, чтобы Ваши программы, установленные в [1 110], использовались в предпочтении к системным исполняемым файлам Ваш, должен переупорядочить оператор экспорта следующим образом:

export PATH=~/bin:$PATH
15
ответ дан 24 November 2019 в 00:13
поделиться
gcc main.cpp -o main.out  
./main.out
107
ответ дан 24 November 2019 в 00:13
поделиться

Добавьте следующее для получения лучших предупреждений, Вы не будете сожалеть о нем. Если Вы можете, скомпилировать МУДРЫЙ (предупреждение является ошибкой)

- Wall -pedantic -Weffc++ -Werror
7
ответ дан 24 November 2019 в 00:13
поделиться