Как вы узнали из урока «0.4 – Введение в разработку на C++», при компиляции и компоновке программы на выходе получается исполняемый файл. Когда программа запускается, выполнение начинается с функции main() . До этого момента мы объявляли main следующим образом:
int main()
Обратите внимание, что эта версия main() не принимает параметров. Однако для работы со многими программами требуются какие-то входные данные. Например, предположим, что вы пишете программу под названием Thumbnail , которая считывает файл изображения, а затем создает миниатюру (уменьшенную версию этого изображения).
Как Thumbnail узнает, какое изображение прочитать и обработать? Пользователь должен каким-то образом указать программе, какой файл открыть. Для этого вы можете использовать следующий подход:
// Программа: Thumbnail #include #include int main() < std::cout ; std::cin >> filename; // открываем файл изображения // создаем миниатюру // выводим миниатюру >
Однако при таком подходе есть потенциальная проблема. Каждый раз, когда программа запускается, она будет ждать, пока пользователь введет данные. Это может не быть проблемой, если вы запускаете эту программу один раз вручную из командной строки. Но это проблематично в других случаях, например, когда вы хотите запустить эту программу для многих файлов или запустить ее другой программой.
TCC_00_02 Компиляция программы на языке Си из командной строки. Переменная окружения path в cmd
Давайте рассмотрим эти случаи подробнее.
Рассмотрим случай, когда вы хотите создать миниатюры для всех файлов изображений в заданном каталоге. Как бы вы это сделали? Вы можете запускать эту программу столько раз, сколько изображений в каталоге, печатая имя каждого файла вручную. Однако если бы изображений были сотни, это могло бы занять целый день! Хорошим решением здесь было бы написать программу, которая перебирает имя каждого файла в каталоге, вызывая Thumbnail один раз для каждого файла.
Теперь рассмотрим случай, когда вы запускаете веб-сайт и хотите, чтобы на вашем сайте создавался эскиз каждый раз, когда пользователь загружает изображение на ваш сайт. Эта программа не настроена для приема входных данных из Интернета, так как же человек, загружающий файл, будет вводить имя файла в этом случае? Хорошим решением здесь было бы, чтобы ваш веб-сервер автоматически вызывал Thumbnail после загрузки.
В обоих этих случаях нам нужен способ, чтобы внешняя программа могла передавать имя файла в качестве входных данных для нашей программы Thumbnail при ее запуске, а не заставлять Thumbnail ждать после запуска, пока пользователь введет имя файла.
Аргументы командной строки – это необязательные строковые аргументы, которые операционная система передает программе при ее запуске. Затем программа может использовать их в качестве входных данных (или игнорировать). Подобно параметрам функции, которые позволяют функции предоставлять входные данные для другой функции, аргументы командной строки позволяют людям или программам предоставлять входные данные программе.
Передача аргументов командной строки
Исполняемые программы можно запускать из командной строки, вызывая их по имени. Например, чтобы запустить исполняемый файл » WordCount «, который находится в корневом каталоге диска C: на компьютере с Windows, вы можете ввести:
argc argv c++ что это. Параметры функции main argc argv. Аргументы main. C ++ Урок #70
C:>WordCount
Чтобы передать аргументы командной строки в WordCount , мы просто перечисляем их после имени исполняемого файла:
C:>WordCount Myfile.txt
Теперь при выполнении WordCount Myfile.txt будет предоставлен в качестве аргумента командной строки. Программа может иметь несколько аргументов командной строки, разделенных пробелами:
C:>WordCount Myfile.txt Myotherfile.txt
Это также работает и в других операционных системах командной строки, таких как Linux (хотя приглашение и структура каталогов, несомненно, будут отличаться).
Если вы запускаете свою программу из среды IDE, в среде IDE должен быть предусмотрен способ ввода аргументов командной строки.
В Microsoft Visual Studio кликните правой кнопкой мыши на своем проекте в обозревателе решений и выберите «Свойства» (Properties). В открывшемся окне разверните дерево «Свойства конфигурации» (Configuration Properties) и выберите «Отладка» (Debugging). На правой панели есть строка с названием «Аргументы команды» (Command Arguments). Вы можете ввести туда аргументы командной строки для тестирования, и они будут автоматически переданы вашей программе при ее запуске.
В Code::Blocks выберите «Project» (Проект) → «Set program’s arguments» (Установить аргументы программы).
Использование аргументов командной строки
Теперь, когда вы знаете, как предоставить программе аргументы командной строки, следующим шагом будет доступ к ним из нашей программы на C++. Для этого мы используем другую форму main() . Эта новая форма main() принимает два аргумента (по соглашению названные argc и argv ) следующим образом:
int main(int argc, char *argv[])
Иногда вы также можете увидеть и такое:
int main(int argc, char** argv)
Несмотря на то, что они обрабатываются одинаково, мы предпочитаем первое представление, потому что его интуитивно легче понять.
argc – это целочисленный параметр, содержащий счетчик числа аргументов, переданных программе ( argc = argument count, число аргументов). argc всегда будет не меньше 1 потому, что первым аргументом всегда является имя самой программы. Каждый аргумент командной строки, предоставляемый пользователем, приведет к увеличению argc на 1.
argv – это место, где хранятся фактические значения аргументов ( argv = argument values, значения аргументов, хотя на самом деле расшифровывается как «argument vectors»). Хотя объявление argv выглядит устрашающе, на самом деле argv представляет собой просто массив строк в стиле C. Длина этого массива – argc .
Давайте напишем короткую программу с именем MyArgs для вывода значений всех параметров командной строки:
// Программа: MyArgs #include int main(int argc, char *argv[]) < std::cout ; count < argc; ++count) < std::cout return 0; >
Теперь, когда мы вызываем эту программу ( MyArgs ) с аргументами командной строки » Myfile.txt » и » 100 «, вывод будет следующим:
There are 3 arguments: 0 C:MyArgs 1 Myfile.txt 2 100
Аргумент 0 – это путь и имя текущей запущенной программы. Аргументы 1 и 2 в данном случае – это два параметра командной строки, которые мы передали.
Работа с числовыми аргументами
Аргументы командной строки всегда передаются в виде строк, даже если предоставленное значение является числовым. Чтобы использовать аргумент командной строки в качестве числа, вы должны преобразовать его из строки в число. К сожалению, C++ делает это немного сложнее, чем должно быть.
В C++ это можно сделать следующим образом:
#include #include // для std::stringstream #include int main(int argc, char *argv[]) < if (argc » » // устанавливаем переменную строкового потока с именем convert, // инициализированную входными данными из argv[1] std::stringstream convert< argv[1] >; int myint<>; if (!(convert >> myint)) // выполняем преобразование myint = 0; // если преобразование не удалось, //установим для myint значение по умолчанию std::cout
При запуске с вводом » 567 » эта программа печатает:
Got integer: 567
std::stringstream работает так же, как std::cin . В этом случае мы инициализируем его значением argv[1] , и поэтому можем использовать operator>> для извлечения значения в целочисленную переменную (так же, как и с std::cin ).
Подробнее о std::stringstream мы поговорим в следующей главе.
Операционная система анализирует аргументы командной строки первой
Когда вы вводите что-то в командной строке (или запускаете свою программу из IDE), операционная система должна преобразовать и направить этот запрос соответствующим образом. Это не только включает в себя запуск исполняемого файла, но также включает анализ любых аргументов, чтобы определить, как они должны обрабатываться и передаваться приложению.
Как правило, в операционных системах действуют особые правила обработки специальных символов, таких как двойные кавычки и обратный слеш.
MyArgs Hello world!
There are 3 arguments: 0 C:MyArgs 1 Hello 2 world!
Обычно строки, переданные в двойных кавычках, считаются частью одной строки:
MyArgs «Hello world!»
There are 2 arguments: 0 C:MyArgs 1 Hello world!
Если вы хотите включить двойную кавычку в состав строки, вам нужно поставить перед двойной кавычкой обратный слеш:
MyArgs «Hello world!»
There are 3 arguments: 0 C:MyArgs 1 «Hello 2 world!»
Заключение
Аргументы командной строки предоставляют пользователям и другим программам отличный способ передать входные данные в программу при запуске. Рассмотрите возможность использования любых входных данных, необходимых для работы программы при запуске, в качестве параметров командной строки.
Если они не будут переданы через командную строку, вы всегда можете обнаружить это и попросить пользователя ввести данные. Таким образом, ваша программа сможет работать в любом случае.
Источник: radioprog.ru
Пошаговое руководство. Компиляция программы на языке C из командной строки
Средства сборки Visual Studio включают компилятор C, который можно использовать для создания всего: от базовых консольных программ до полнофункционных классических приложений Windows, мобильных приложений и т. д. Microsoft C/C++ (MSVC) — это компилятор C и C++, который в последних версиях соответствует некоторым из последних стандартов языка C, включая C11 и C17.
В этом пошаговом руководстве показано, как создать простейшую программу на языке C в стиле «Hello, World» в текстовом редакторе с последующей компиляцией из командной строки. Если вы предпочитаете работать с C++ в командной строке, см. статью Пошаговое руководство. Компиляция собственной программы на языке C++ из командной строки. Если вы хотите попробовать интегрированную среду разработки Visual Studio вместо командной строки, см. статью Пошаговое руководство. Работа с проектами и решениями (C++) или Использование интегрированной среды разработки Visual Studio для разработки приложений для настольных систем на языке C++.
Предварительные требования
Для выполнения этого пошагового руководства необходимо установить Visual Studio или средства сборки для Visual Studio и дополнительную рабочую нагрузку Разработка классических приложений на C++.
Visual Studio — это эффективная интегрированная среда разработки, которая поддерживает полнофункциональный редактор, диспетчеры ресурсов, отладчики и компиляторы для многих языков и платформ. Сведения об этих компонентах, а также о скачивании и установке Visual Studio, включая бесплатный выпуск Visual Studio Community, см. в этой статье.
При использовании версии Build Tools для Visual Studio устанавливаются только программы командной строки, библиотеки и компиляторы, необходимые для сборки программ на C и C++. Это идеальный вариант для создания заданий и упражнений, а установка выполняется относительно быстро. Чтобы установить только набор программ командной строки, скачайте Build Tools для Visual Studio на странице скачивания Visual Studio, а затем запустите установщик. В установщике Visual Studio выберите рабочую нагрузку Разработка классических приложений на C++ (в более ранних версиях Visual Studio выберите рабочую нагрузку Средства сборки C++ ) и нажмите кнопку Установить.
После установки средств вы можете использовать другое средство для создания программы C или C++ в командной строке. MSVC предъявляет сложные требования к среде командной строки для поиска средств, заголовков и библиотек, которые она использует. MsVC нельзя использовать в простом окне командной строки без определенной подготовки.
Вам понадобится окно командной строки разработчика, являющееся обычным окном командной строки, в котором заданы все необходимые переменные среды. К счастью, Visual Studio устанавливает ярлыки для запуска командных строк разработчика, в которых среда настроена для сборок из командной строки. К сожалению, имена ярлыков командной строки разработчика и их расположение различаются практически в каждой версии Visual Studio и в разных версиях Windows. Первая задача пошагового руководства — найти нужный ярлык.
Ярлык командной строки разработчика автоматически задает правильные пути для компилятора и средств, а также для всех необходимых заголовков и библиотек. Некоторые из этих значений различаются для каждой конфигурации сборки. Если вы не используете ни один из ярлыков, эти значения среды необходимо задать самостоятельно. Дополнительные сведения см. в статье Использование набора инструментов MSVC из командной строки. Так как настраивать среду разработки сложно, настоятельно рекомендуется использовать ярлык командной строки разработчика вместо создания собственного.
Эти инструкции зависят от используемой версии Visual Studio. Чтобы ознакомиться с документацией по предпочтительной версии Visual Studio, используйте селектор Версия. Он находится в верхней части оглавления на этой странице.
Открытие командной строки разработчика в Visual Studio 2022
Если вы установили Visual Studio 2022 в Windows 10 или более поздней версии, откройте меню «Пуск» и выберите Все приложения. Прокрутите вниз и откройте папку Visual Studio 2022 (не приложение Visual Studio 2022). Выберите элемент Командная строка разработчика для VS 2022, чтобы открыть окно командной строки.
Открытие командной строки разработчика в Visual Studio 2019
Если вы установили Visual Studio 2019 в Windows 10 или более поздней версии, откройте меню «Пуск» и выберите Все приложения. Прокрутите вниз и откройте папку Visual Studio 2019 (не приложение Visual Studio 2019). Выберите элемент Командная строка разработчика для VS 2019, чтобы открыть окно командной строки.
Открытие командной строки разработчика в Visual Studio 2017
Если вы установили Visual Studio 2017 в Windows 10 или более поздней версии, откройте меню «Пуск» и выберите Все приложения. Прокрутите вниз и откройте папку Visual Studio 2017 (не приложение Visual Studio 2017). Выберите элемент Командная строка разработчика для VS 2017, чтобы открыть окно командной строки.
Открытие командной строки разработчика в Visual Studio 2015
Если вы установили Microsoft Visual C++ Build Tools 2015 в Windows 10 или более поздней версии, откройте меню «Пуск» и выберите Все приложения. Прокрутите вниз и откройте папку Microsoft Visual C++ Build Tools. Выберите элемент Командная строка Native Tools x86 Visual C++ 2015, чтобы открыть окно командной строки.
Если вы используете другую версию Windows, найдите в меню «Пуск» или на начальной странице папку средств Visual Studio, содержащую ярлык командной строки разработчика. Можно также ввести «командная строка разработчика» в строке поиска в Windows и выбрать командную строку, которая соответствует установленной версии Visual Studio. Откройте окно командной строки с помощью ярлыка.
Затем убедитесь, что командная строка разработчика настроена правильно. В окне командной строки введите cl (или CL , регистр не имеет значения для имени компилятора, но имеет значение для параметров компилятора). Результат должен выглядеть следующим образом.
C:Program Files (x86)Microsoft Visual Studio2017Enterprise>cl Microsoft (R) C/C++ Optimizing Compiler Version 19.10.25017 for x86 Copyright (C) Microsoft Corporation. All rights reserved. usage: cl [ option. ] filename. [ /link linkoption. ]
В зависимости от версии Visual Studio и установленных обновлений могут быть различия в текущем каталоге или номерах версий. Если приведенный выше результат похож на отображаемый, можно приступать к сборке программ C или C++ в командной строке.
Если при выполнении команды cl появляется сообщение об ошибке «cl не распознается как внутренняя или внешняя команда, работает программа или пакетный файл», ошибка C1034 или ошибка LNK1104, то либо вы не используете командную строку разработчика, либо что-то не так с установкой Visual Studio. Для продолжения нужно будет исправить ошибку.
Если не удается найти ярлык командной строки разработчика или при вводе cl отображается сообщение об ошибке, возможно, возникла проблема с установкой Visual Studio. При использовании Visual Studio 2017 или более поздней версии попробуйте переустановить рабочую нагрузку Разработка классических приложений на C++ с помощью установщика Visual Studio.
Подробные сведения см. в статье Справка по установке средства С++ в Visual Studio. Можно также переустановить Build Tools со страницы Загрузки Visual Studio. Не переходите к следующему разделу, пока команда cl не сработает. Дополнительные сведения об установке Visual Studio и устранении неполадок см. в статье Установка Visual Studio.
В зависимости от версии Windows, установленной на компьютере, и конфигурации системы безопасности может потребоваться правой кнопкой мыши открыть контекстное меню для ярлыка командной строки разработчика и выбрать пункт Запуск от имени администратора, чтобы успешно выполнить сборку и запуск программы, созданной в этом пошаговом руководстве.
Создание файла исходного кода на языке C и его компиляция из командной строки
- В окне командной строки разработчика введите команду cd c: , чтобы изменить текущий рабочий каталог на корень диска C:. Затем введите md c:hello , чтобы создать каталог, и введите cd c:hello , чтобы перейти к этому каталогу. В этом каталоге будут находиться исходный файл и скомпилированная программа.
- В командной строке разработчика введите команду notepad hello.c . В появившемся диалоговом окне блокнота с оповещением выберите Да, чтобы создать файл hello.c в рабочей папке.
- В окне блокнота введите следующие строки кода:
#include int main()
C:hello>dir Volume in drive C has no label. Volume Serial Number is CC62-6545 Directory of C:hello 10/02/2017 03:46 PM . 10/02/2017 03:46 PM .. 10/02/2017 03:36 PM 143 hello.c 1 File(s) 143 bytes 2 Dir(s) 514,900,566,016 bytes free
c:hello>cl hello.c Microsoft (R) C/C++ Optimizing Compiler Version 19.10.25017 for x86 Copyright (C) Microsoft Corporation. All rights reserved. hello.c Microsoft (R) Incremental Linker Version 14.10.25017.0 Copyright (C) Microsoft Corporation. All rights reserved. /out:hello.exe hello.obj
Примечание Если вы получаете сообщение об ошибке, например «cl не распознается как внутренняя или внешняя команда, исполняемая программа или пакетный файл», ошибке C1034 или LNK1104, командная строка разработчика настроена неправильно. Чтобы получить сведения о том, как устранить эту проблему, вернитесь к разделу Открыть командную строку разработчика. Если вы получаете другое сообщение об ошибке или предупреждение компилятора или компоновщика, проверьте исходный код, исправьте ошибки, сохраните его и снова запустите компилятор. Для получения сведений о конкретных ошибках введите номер ошибки в поле поиска вверху этой страницы.
Hello, World! This is a native C program compiled on the command line.
Следующие шаги
Этот пример Hello, World является самой простой программой C. Реальные программы выполняют полезные действия и имеют файлы заголовков, дополнительные исходные файлы и ссылки на библиотеки.
Вы можете использовать шаги, описанные в этом пошаговом руководстве для C, для создания собственного кода, чтобы не вводить приведенный пример. Вы также можете выполнить сборку различных примеров кода на C, которые можно найти в других местах. Чтобы скомпилировать программу с большим объемом файлов исходного кода, введите их все в командной строке:
cl file1.c file2.c file3.c
Компилятор выводит программу с именем file1.exe . Чтобы изменить имя на program1.exe , добавьте параметр компоновщика /out :
cl file1.c file2.c file3.c /link /out:program1.exe
Чтобы автоматически перехватывать другие ошибки программирования, рекомендуется выполнить компиляцию с помощью порога предупреждений /W3 или /W4:
cl /W4 file1.c file2.c file3.c /link /out:program1.exe
Компилятор cl.exe имеет множество других параметров, которые можно применять для создания, оптимизации, отладки и анализа кода. Чтобы просмотреть краткий список, введите cl /? в командной строке разработчика. Можно также выполнять компиляцию и компоновку отдельно и применять параметры компоновщика в более сложных сценариях сборки. Дополнительные сведения о параметрах компилятора и компоновщика и их использовании см. в справочнике по созданию C/C++.
Для настройки и создания более сложных проектов в командной строке можно использовать NMAKE и файлы makefile либо MSBuild и файлы проекта. Дополнительные сведения об использовании этих средств см. в разделах Справочник по NMAKE и MSBuild.
Языки C и C++ похожи, но имеют различия. Компилятор Microsoft C/C++ (MSVC) использует простое правило для определения языка, используемого при компиляции кода. По умолчанию компилятор MSVC рассматривает все файлы с расширением .c как исходные коды на языке С, а файлы с расширением .cpp как исходные коды на языке С++. Если указан параметр компилятора /TC, компилятор будет рассматривать все файлы как исходные коды на языке С вне зависимости от расширения.
По умолчанию MSVC совместим со стандартами ANSI C89 и ISO C99, но не соответствует строго. В большинстве случаев переносимый код на языке C будет компилироваться и выполняться должным образом. Компилятор обеспечивает дополнительную поддержку изменений в ISO C11/C17.
Чтобы выполнить компиляцию с поддержкой C11/C17, используйте флаг компилятора /std:c11 или /std:c17 . Для поддержки C11 и C17 требуется Windows SDK 10.0.20201.0 или более поздняя версия. Рекомендуется использовать Windows SDK 10.0.22000.0 или более позднюю версию. Последнюю версию пакета можно скачать на странице Windows SDK. Дополнительные сведения и инструкции по установке и использованию этого пакета SDK для разработки на языке C см. в статье Установка поддержки C11 и C17 в Visual Studio.
Некоторые функции библиотеки и имена функций POSIX являются нерекомендуемыми в компиляторе MSVC. Функции поддерживаются, но предпочтительные имена изменились. Дополнительные сведения см. в статьях Функции безопасности в CRT и Предупреждение компилятора (уровень 3) C4996.
Источник: learn.microsoft.com
Запустите C ++ в командной строке — Windows
Я знаю, что каждый использует IDE в наши дни, но мне просто проще написать свой код в блокноте ++, скомпилировать его с помощью команды командной строки и запустить его оттуда тоже. По крайней мере, это работает для Java и Python. Я пытался разобраться, как это сделать с С++, и не смог найти ничего хорошего.
Есть ли какой-нибудь компилятор (например, Java JDK), который я могу вставить в свой путь и использовать эквивалент С++ javac и java для запуска и компиляции моего кода из CMD? Примечание. Пожалуйста, не публикуйте ответы и комментарии о том, как IDE лучше — я знаю, что они есть. Я просто привык делать это по-старому: D
Bluefire 06 июль 2012, в 18:19
Поделиться
Конечно, какую операционную систему вы используете?
cha0site 06 июль 2012, в 16:08
Вероятно, windows . установите бесплатную версию visual studio, и вы можете использовать команду «cl».
nisah 06 июль 2012, в 16:10
Mooing Duck 06 июль 2012, в 16:16
Показать ещё 1 комментарий
Поделиться:
command-line
compiler-construction
5 ответов
Лучший ответ
Это зависит от того, какой компилятор вы используете.
Например, если вы используете Visual С++.NET 2010 Express, запустите Visual С++ 2010 Express Command Prompt из меню «Пуск», и вы можете просто скомпилировать и запустить код.
> cl /EHsc mycode.cpp > mycode.exe
или из обычной командной строки, вы можете запустить vcvars32.bat сначала, чтобы настроить среду. В качестве альтернативы выполните поиск setvcvars.cmd (часть проекта FLOSS) и используйте это, чтобы даже найти установленный VS и вызвать для него вызов vcvars32.bat .
Пожалуйста, проверьте руководство для компилятора для командной строки.
Rango 06 июль 2012, в 16:18
Поделиться
Шаги для выполнения задачи:
- Да, сначала установите компилятор: загрузите отсюда
- Затем введите программу C/C++, сохраните ее.
- Затем откройте командную строку и измените каталог, используя cd для конкретного каталога, в котором хранится исходный файл. как: cd C:Documents and Settings.
- Затем скомпилировать/запустить тип в командной строке, gcc sourcefile_name.c или gcc -o outputfile.exe
codeDEXTER 06 июль 2012, в 17:28
Поделиться
Если вы упоминаете cd , вы должны упомянуть, что он, вероятно, должен сначала поставить gcc на путь.
Mooing Duck 06 июль 2012, в 16:24
Gigi 06 июль 2012, в 16:25
Mooing Duck 06 июль 2012, в 16:35
Показать ещё 1 комментарий
Если вы работаете в Windows, воспользуйтесь этим:
g++ -o program program.cpp
g++ — это имя компилятора, а -o — это опция, необходимая для создания файла.o. Программа (без суффикса.cpp) — это exe файл, а program.cpp — ваш исходный файл, который вы хотите скомпилировать.
g++ -o program program.cppprogram.exe
JedaiCoder 31 май 2016, в 14:50
Поделиться
Я действительно не понимаю, в чем проблема, вопрос довольно неспецифичен.
Учитывая Notepad ++, я предполагаю, что вы используете Windows.
Здесь у вас так много вариантов: от MinGW (с использованием цепочки инструментов GCC и GNU make ) до использования современного MSVC. Вы можете использовать WDK ( ddkbuild.bat/.cmd или plain build.exe ), Windows SDK ( nmake.exe ), другие инструменты, такие как premake и CMake или msbuild , который поставляется с MSVC и SDK Windows.
Я имею в виду, что имена компиляторов будут отличаться, cl.exe для MSVC и WDK и Windows SDK, gcc.exe для MinGW, но даже с консоли обычно организуется ваш проект. Это то, что make и друзья были изобретены в конце концов.
Итак, чтобы знать ключи командной строки вашего конкретного компилятора, обратитесь к руководству этого самого компилятора. Чтобы найти способы автоматизации вашей сборки (т.е. Возможность запуска простой команды вместо сложной командной строки), вы можете просеивать список в Википедии или выберите один из инструментов, упомянутых выше, и идите с этим.
Боковое примечание: нет необходимости просить людей не упоминать IDE. Большинство профессиональных разработчиков автоматизировали свои сборки для запуска из командной строки, а не из среды IDE (например, во время цикла разработки), поскольку для этого подхода существует так много преимуществ.
Источник: overcoder.net