Процесс компиляции программ на c++
Содержание:
- Testing
- Lexing
- AMD x86 Open64 Compiler Suite
- Wandbox
- Интерпретатор C / C++ Ch Embeddable (стандартная версия)
- Прочие
- Установка MinGW
- Комментарии 59
- Update 2/18/19
- Week 1: Integers
- Следующие шаги
- SharpDevelop IDE
- Онлайн-компиляторы для Python
- Компилятор кода с C# компилятором
- Putting it all together
- Compiler Explorer (Godbolt)
- Пример пошаговой процедуры
Testing
You can test that your compiler is working properly with the test script here. It will compile a set of test programs using your compiler, execute them, and make sure they return the right value.
To invoke it:
In order to test it with the script, your compiler needs to follow this spec:
-
It can be invoked from the command line, taking only a C source file as an argument, e.g.:
- When passed , it generates executable in the same directory.
- It doesn’t generate assembly or an executable if parsing fails (this is what the test script checks for invalid test programs).
The script doesn’t check whether your compiler outputs sensible error messages, but you can use the invalid test programs to test that manually.
Lexing
The lexer (also called the scanner or tokenizer) is the phase of the compiler that breaks up a string (the source code) into a list of tokens. A token is the smallest unit the parser can understand — if a program is like a paragraph, tokens are like individual words. (Many tokens are individual words, separated by whitespace.) Variable names, keywords, and constants, and punctuation like braces are all examples of tokens. Here’s a list of all the tokens in return_2.c:
- keyword
- Identifier “main”
- Open parentheses
- Close parentheses
- Open brace
- keyword
- Constant “2”
- Semicolon
- Close brace
Note that some tokens have a value (e.g. the constant token has value “2”) and some don’t (like parentheses and braces). Also note that there are no whitespace tokens. (In some languages, like Python, whitespace is significant and you do need tokens to represent it.)
Here are all the tokens your lexer needs to recognize, and the regular expression defining each of them:
- Open brace
- Close brace
- Open parenthesis
- Close parenthesis
- Semicolon
- Int keyword
- Return keyword
- Identifier
- Integer literal
If you want, you could just have a “keyword” token type, instead of a different token type for each keyword.
Task:
Write a lex function that accepts a file and returns a list of tokens. It should work for all stage 1 examples in the test suite, including the invalid ones. (The invalid examples should raise errors in the parser, not the lexer.) To keep things simple, we only lex decimal integers. If you like, you can extend your lexer to handle octal and hex integers too.
You might notice that we can’t lex negative integers. That’s not an accident — C doesn’t have negative integer constants. It just has a negation operator, which can be applied to positive integers. We’ll add negation in the next post.
AMD x86 Open64 Compiler Suite
Это версия набора компиляторов Open64 (описанного ниже), которая была настроена для процессоров AMD и имеет дополнительные исправления ошибок. Компилятор C / C++ соответствует стандартам ANSI C99 и ISO C++ 98, поддерживает межъязыковые вызовы (так как он включает в себя компилятор Fortran), 32-битный и 64-битный код x86, векторную и скалярную генерацию кода SSE / SSE2 / SSE3, OpenMP 2.5 для моделей с разделяемой памятью, MPICH2 для моделей с распределенной и разделяемой памятью; содержит оптимизатор, поддерживающий огромное количество оптимизаций (глобальную, цикл-узел, межпроцедурный анализ, обратную связь) и многое другое. Набор поставляется с оптимизированной AMD Core Math Library и документацией. Для этого набора компиляторов требуется Linux.
Wandbox
URL | http://melpon.org/wandbox |
Compilers | GCC 4.4.7 .. 8.0.0 (HEAD) Clang 3.1 .. 5.0.0 (HEAD) zapcc 1.0.1 |
C++ version | C++17* |
Compiler flags | dropdown selection + free text |
Runtime parameters | yes |
Stdin | yes |
Wandbox provides pretty much all of the functionality you’d want from a typical online compiler, including support for multiple files and different editor keybindings.
Besides the standard library, it features a few libraries including Boost (up to 1.64), Sprout and MessagePack. The compiled programs run in a sandbox environment that allows file I/O.
The snapshot versions of GCC and Clang that are provided make it possible to play with the latest C++17 features.
I have used Wandbox extensively in the last months, especially to verify code samples from a C++17 book that I had the pleasure to review. Since it has HEAD revisions of both Clang and GCC available, almost every of the C++17 features I tested did compile. Therefore, Wandbox is currently my go-to online compiler when I want to execute the compiled program.
Интерпретатор C / C++ Ch Embeddable (стандартная версия)
Интерпретатор C / C++, поддерживающий стандарт ISO 1990 C (C90), основные функции C99, классы C++, а также расширения к языку С, такие как вложенные функции, строковый тип и т. д. Он может быть встроен в другие приложения и аппаратные средства, использоваться в качестве языка сценариев. Код C / C++ интерпретируется напрямую без компиляции промежуточного кода. Поскольку этот интерпретатор поддерживает Linux, Windows, MacOS X, Solaris и HP-UX, созданный вами код можно перенести на любую из этих платформ. Стандартная версия бесплатна для личного, академического и коммерческого использования. Для загрузки пакета необходимо зарегистрироваться.
Прочие
Которыми раньше пользовался, но которые по каким-то причинам ушли из моих фаворитов.
-
http://cpp.sh/
- Плюсы:
- Короткое и лаконичное имя 🙂
- C++98, C++11, C++14 — по выбору (GCC 4.9.2)
- Различные уровни оптимизации: O0, O1, O2, O3
- Поддержка предупреждений: Wall, Wextra, Wpedantic
- Boost 1.55 (больше никто не предоставляет)
- Можно шарить код
- Ввод через стандартный ввод: интерактивный (этого нет ни у кого больше) и текст
- Сразу большое окно редактора
- Минусы
- Только C++
- Нет работы с файлами
- Не понимает завершения процесса по сигналу
- Плюсы:
-
http://ideone.com
- Плюсы:
- C++14 стандарт (компилятор gcc 8.2 и clang 8.0)
- Можно шарить код + оставить аннотацию к нему (нажать “More options”)
- Можно задать данные которые отошлются на STDIN программы
- Минусы:
- Нельзя задать параметры сборки
- Нельзя передать параметры командной строки
- Других стандартов C++ нет (С++98/03, C++11, C++17, C++20)
- Плюсы:
Установка MinGW
Для установки требуется подключение к сети интернет.
Запустите установщик, он скачает и установит все необходимые файлы.
Жмите «Next».
Диалог сообщает нам, что программа запущена администратором компьютера и будет установлена для всех пользователей.
На этом этапе укажем загружать последнюю версию программного обеспечения.
Соглашаемся с условиями лицензионного соглашения и жмём «Next».
Укажем путь для установки. Не рекомендуется устанавливать в директорию или субдиректорию имеющюю в своём имени пробелы.
Рзмещайте все файлы по стандартному пути, например, «C:\MinGW».
Настройка ярлыков, можно оставить как есть и нажать «Next».
Выбор компонентов для установки.
В данном случае выбраны компилятор С и С++, инструменты для разработки и комплект утилит командной строки — MSYS.
Подтверждение настроек.
Если всё выбрано правильно, жмём «Install».
Начало установки — ожидаем начала загрузки компонентов.
Автоматически запускается консольное окно, в котором отражается весь ход процесса — в данный момент загружаются списки пакетов.
В следующем окне мы можем наблюдать за прогрессом загрузки.
Установка окончена, если вы не хотите читать подробный отчёт о процессе установки, снимите галочку.
Закройте окно установщика — нажмите «Finish».
Проверим, готова ли операционная система для полноценной работы с MinGW. В свойствах компьютера на вкладке «Дополнительно» кликните по кнопке «Переменные среды».
Нам потребуется значение переменной PATH, там должны быть прописаны пути к папкам с исполняемыми файлами MinGW и MSYS, в данном случае это директории «C:\MinGW\bin» и «C:\MinGW\msys\1.0\bin».
Если эти значения не были автоматически добавлены в переменную в процессе установки, допишите их вручную, добавте в начало строку «C:\MinGW\bin;C:\MinGW\msys\1.0\bin;», только без кавычек.
Если в вашей операционной системе отсутствует переменная PATH, то создайте её самостоятельно.
Теперь, когда все инструменты установлены, можно использовать GCC компиляторы в режиме командной строки или настроить их использование в своей IDE.
Комментарии 59
я конечно понимаю, старая школа, стремление к минимализму… но зачем же себе усложнять жизнь печатая код в блокноте, потом переносить в студию, компилировать, смотреть ошибки и так в цикле…
это дурная работа, лучше сразу иде юзать
зачем переносить в студию? неужели без студии совсем нельзя разрабатывать?
компилировать можно через командную строку
а использование блокнота оправдано тем что понимаешь(запоминаешь, изучаешь, ну и так далее) больше, так как делаешь все сам, и нет большого количества автоматизированных процессов (которые делает IDE)
процесс обучение то как раз и направлен на то чтобы изучить, и скорость разработки (для которой и нужна IDE) здесь не важна
на С++ не писал, учился на JAVA, применение блокнота на ранних этапах было более чем оправдано
Навыки работы в IDE пригодятся, если впоследствии полученные знания захотят использовать. В очень многих софтостроительных компаниях именно Visual Studio используется для разработки.
Мое ИМХО. Уже больше 15 лет занимаюсь разработкой. Хорошо владею NetBeans, Eclipse, CodeWarrior, Visual Studio. По личному опыту — Visual Studio + Visual Assist вне конкуренции :(.
Готов вами поспорить. Никто вас не заставляет разрабатывать в блокноте, для серьезных задач свои инструменты. Но не зная азов, не стоит (на мой взгляд) садиться за IDE. Сначала нужно досконально разобраться в технологиях.
За годы моей практики (чуть меньше чем у вас :)) не раз убеждался в относительной «полезности» визардов и других помощников. Далеко не всегда они упрощают разработку.
Готов согласиться. Но тут многое зависит от модели обучения — «снизу вверх» или «сверху вниз». ХЗ что сейчас для новичков лучше. Да и вообще с++ ИМХО не лучший язык для обучения именно новичков — все-таки он шибко низкоуровневый.
Что мешает обучать непосредственно программированию в IDE где и отладка есть, и ошибки сразу подсвечиваются, и автодополнение — а тему «волшебная компиляция текстового файла в .exe» показать на том же gcc или коммандлайновой версии Visual C++? ИМХО, в «программировании для новичков» непосредственно волшебный процесс компиляции и линковки не то чтобы очень долгий или сложный.
Если только основы языка, то Borland C++ 3.1
А если серъезно советовал бы Visual Studio.
Borland сильно «развращает мозг» начинающего программиста… у них плоховата стандарт реализован и имеются всякие свои извращенные механизмы перенятые с object pascal
для начала 1. учи стандартный с++ 2. старайся не привязываться к среде и к платформе
Qt Creator и просто для С++ хорош, и еще и под Qt заточен
вообще для новичка нужно разве что автодополнение кода (ну кроме подсветки) + документация документации в инете полно, а с автодополнением — почти каждая IDE
1. Любой редактор с подсветкой синтаксиса, например, kate или notepad++. Главное, что бы это было не IDE. 2. Компилятор + linker из консоли. 3. Затем можно Makefile освоить. 4. После того, как эти шаги отточены и поняты можно браться за IDE.
Если освоить шаги в такой последовательности, то будет очень просто перейти к continuous integration и nunit тестированию.
1. Текстовый редактор (emacs/vi/notepad++) 2. make/Makefiles 3. gcc/mingw
Основам только так и строго обязательно. Иначе нормальный программист не получится.
А вы не выбирайте — используйте и то и другое, пусть ученики поймут основные принципы работы в IDE, без привязки к какому-то конкретному.
Если решите все же привязываться к одной IDE — я бы советовал Visual Studio и вот почему. Visual Studio — это промышленный стандарт для разработки под Windows. Для разработки под *NIX такого стандарта нет, поэтому те, кто будут разрабатывать под *NIX всё равно будут выбирать себе IDE из присутствующего многообразия и не факт, что остановятся именно на эклипсе.
если будете изучать при помощи студии то сможете отвязяться от проблем с сборкой, настройкой, запуском — код написал, и запустил. Что происходит в промежутке — неизствестно но оно работает. Таким образом человек научится писать код, но не будет понимать как из кода возникает бинарник. Потом брошенный в разработку чего-то неизвестного человек потеряется — он ведь привык чтобы из кода программа возникала сама.
другой вариант — эклипс. Тут вам придется указать компилятор, заодно увидят и остальные настройки проекта. Сразу же конечно ничего не заработает, придется немного покопаться. Таким образом помимо самого кода вы научите людей не боятся разбираться с разными полезными программами, да и они будут разделять понятия IDE и компилятор.
Update 2/18/19
There’s one more thing you need to decide on: whether to target 32-bit or 64-bit assembly. This series uses 32-bit architecture because that’s what Ghuloum’s paper used. However, I’ve realized since starting the series that this was a bad call. Because 32-bit architecture is increasingly obsolete, compiling and running 32-bit binaries can be a headache. I’ve decided to go back and add 64-bit examples to this series when I get the chance. Until I do that, you have one of two options:
- Figure out on your own how to adapt these posts to a 64-bit instruction set. If you’re at all familiar with assembly, this isn’t too hard and it’s what I’d recommend.
-
Stick with the 32-bit instruction set I’ve used in these posts. This will require a little extra work up front, depending on your OS:
-
On Linux, you’ll need to install some extra libraries in order to turn your 32-bit assembly into an executable. This Dockerfile lists the libraries you’ll need (plus some Scheme-related stuff you can ignore). Many thanks to Jaseem Abid, who had previously worked through Ghuloum’s paper, for creating this Dockerfile and telling me about it.
-
32-bit support is being phased out on macOS, and the next version probably won’t let you run 32-bit binaries at all. At the moment, the binary that ships with XCode won’t compile 32-bit applications by default. You can just install GCC from Homebrew and use that instead, or you can futz around with XCode and figure out how to make it build 32-bit binaries. I went with the former.
-
Week 1: Integers
This week, we’ll compile a program that returns a single integer. We’ll also set up the three basic passes of our compiler. This will be a lot of work for not that much payoff, but the architecture we define now will make it easy to add more language features later on.
Here’s a program we’d like to compile — we’ll call it return_2.c:
We’ll only handle programs with a single function, , consisting of a single return statement. The only thing that varies is the value of the integer being returned. We won’t handle hex or octal integer literals, just decimal. To verify that your compiler works correctly, you’ll need to compile a program, run it, and check its return code:
Your compiler will produce x86 assembly. We won’t transform the assembly into an executable ourselves — that’s the job of the assembler and linker, which are separate programs. To see how this program looks in assembly, let’s compile it with gcc:
Now, let’s look at the assembly itself. We can ignore the , and directives — if you delete them, you can still assemble and run return_2.s. indicates that the symbol should be visible to the linker; otherwise it can’t find the entry point to the program. (If you’re on a Unix-like system other than OS X, this symbol will just be , no underscore.)
Finally, we have our actual assembly instructions:
The most important point here is that when a function returns, the EAX register will contain its return value. The function’s return value will be the program’s exit code.
An important side note: throughout this tutorial, I’ll use AT&T assembly syntax, because that’s what GCC uses by default. Some online resources might use Intel syntax, which has operands in the reverse order from AT&T syntax. Whenever you’re reading assembly, make sure you know what syntax it’s using!
The only thing that can change in the snippet of assembly above is the return value. So one very simple approach would be to use a regular expression to extract the return value from the source code, then plug it into the assembly. Here’s a 20-line Python script to do that:
But parsing the whole program with one big regular expression isn’t a viable long-term strategy. Instead, we’ll split up the compiler into three stages: lexing, parsing, and code generation. As far as I know, this is a pretty standard compiler architecture, except you’d normally want a bunch of optimization passes between parsing and code generation.
Следующие шаги
Этот пример «Hello, World» является самой простой программой C++. Реальные программы обычно имеют файлы заголовков, дополнительные исходные файлы и ссылки на библиотеки.
Вы можете использовать шаги, описанные в этом пошаговом руководстве по C++, для создания собственного кода, чтобы не вводить приведенный пример. Эти шаги также позволяют собрать множество примеров кода C++, которые можно найти в других местах. Вы можете разместить исходный код и собрать приложения в любом доступном для записи каталоге. По умолчанию интегрированная среда разработки Visual Studio создает проекты в папке пользователя во вложенной папке source\repos. Более старые версии могут помещать проекты в папку Документы\Visual Studio <version>\ Проекты*.
Чтобы скомпилировать программу с дополнительными файлами исходного кода, введите их все в командной строке, например:
Параметр командной строки указывает компилятору на необходимость стандартной обработки исключений C++. В противном случае созданные исключения могут привести к неуничтоженным объектам и утечкам ресурсов. Дополнительные сведения см. в статье /EH (модель обработки исключений).
При указании дополнительных исходных файлов компилятор использует первый входной файл для создания имени программы. В этом случае выводится программа с именем file1.exe. Чтобы изменить имя на program1.exe, добавьте параметр компоновщика /out:
Чтобы автоматически перехватывать другие ошибки программирования, рекомендуется выполнить компиляцию с помощью порога предупреждений /W3 или /W4:
В компиляторе cl.exe есть множество дополнительных параметров. Их можно применять для создания, оптимизации, отладки и анализа кода. Чтобы просмотреть краткий список, введите в командной строке разработчика. Можно также выполнять компиляцию и компоновку отдельно и применять параметры компоновщика в более сложных сценариях сборки. Дополнительные сведения о параметрах и использовании компилятора и компоновщика см. в справочнике по сборке для C/C++.
Для настройки и создания более сложных проектов в командной строке можно использовать NMAKE и файлы makefile, MSBuild и файл проекта или CMake. Дополнительные сведения об использовании этих средств см. в разделах Справочник по NMAKE, MSBuild и Проекты CMake в Visual Studio.
Языки C и C++ похожи, но имеют различия. Компилятор MSVC использует простое правило для определения языка, используемого при компиляции кода. По умолчанию компилятор MSVC рассматривает файлы с расширением как исходные файлы на языке С, а файлы с расширением — как исходные файлы на языке С++. Если указан параметр компилятора /TP, компилятор будет рассматривать все файлы как исходные файлы на языке С++ вне зависимости от расширения.
Компилятор MSVC содержит библиотеку времени выполнения C (CRT), которая соответствует стандарту ISO C99 с небольшими исключениями. Переносимый код обычно компилируется и выполняется, как ожидалось. Некоторые устаревшие функции библиотеки и несколько имен функций POSIX не рекомендуется использовать в компиляторе MSVC. Функции поддерживаются, но предпочтительные имена изменились. Дополнительные сведения см. в статьях Функции безопасности в CRT и Предупреждение компилятора (уровень 3) C4996.
SharpDevelop IDE
SharpDevelop — это IDE с открытым исходным кодом для проектов на платформе Microsoft .NET. В SharpDevelop возможно программирование на языках C #, VB.NET, F #, IronPython и IronRuby, а также целевые и расширенные возможности: Windows Forms или WPF, а также ASP.NET MVC и WCF.
Может запускаться с USB-накопителя, поставляется с интегрированными инструментальными средствами и инструментами для тестирования производительности, Git, NuGet. Имеет множество функций, которые повышают производительность труда разработчика. Это IDE с открытым исходным кодом, можно свободно скачать исходный код и исполняемые файлы c сайта загрузки. SharpDevelop имеет мощный интегрированный отладчик, включая динамические функции отладки, предоставляет возможность модульного тестирования и анализа кода.
- Поддерживаемые языки программирования
- C # (Windows Forms Designer)
- VB.NET (Windows Forms Designer)
- Boo (Windows Forms Designer)
- IronPython (Windows Forms Designer)
- IronRuby (Windows Forms Designer)
- F#
- Каркасы приложений, Frameworks
- Windows Presentation Foundation (WPF)
- Windows Forms
- ASP.NET MVC
- Entity Framework (EF EDM Designer)
- Производительность труда разработчиков
- Функция завершения кода подобная IntelliSense
- Рефакторинг (пакетное переименование, улучшение структуры кода)
- Параллельная поддержка сборки для многоядерных машин
- Поддержка пакетов NuGet и T4
- Автоматическая вставка кода
- Запуск с карты памяти USB
- поддержка чтения проект (Подробнее)
- Полная поддержка MSBuild (платформа сборки проекта)
- Инструменты
- Встроенный отладчик (в том числе динамические особенности отладки)
- Анализ кода
- Модульное тестирование (NUnit)
- Встроенная поддержка Git
Проекты, созданные в Visual Studio, вы можете открывать и редактировать в SharpDevelop и наоборот. Бесплатная среда программирования SharpDevelop предназначена для создания и редактирования любительских и коммерческих проектов. Отлично спроектированная среда разработки SharpDevelop может использоваться как альтернатива Visual Studio .NET Community.
Онлайн-компиляторы для Python
Пример кода в Tutorialspoint
Paiza.io — компилятор поддерживающий Python и другие языки программирования. Он предлагает как бесплатную, так и платную версии. В платном варианте вы найдете полезные функции для разработки проектов корпоративного уровня, но для простой проверки кода подойдут и базовые функции компилятора. Интерфейс Paiza доступен на трех языках: испанском, японском и английском. В Paiza вы можете привязать учетную запись git и включить автосинхронизацию кода, сохранить код и редактировать его в любое удобное время, а также настроить интерфейс компилятора под себя.
Пример кода в Paiza.io
Online Python — компилятор с минималистичным дизайном. Он поддерживает версию Python 3.8. Особенность этого компилятора в том, что он поддерживает интерактивное выполнение программы, которое позволяет вводить программные данные в режиме реального времени. В компиляторе также есть опция совместного использования кода: вы можете сохранить код в облаке и использовать его вместе с коллегами.
Пример кода в Online Python
Компилятор кода с C# компилятором
В платформа .NET Framework предоставляется интерфейс выполнения компиляторов. Класс реализует этот интерфейс и предоставляет доступ к экземплярам генератора C# и компилятора кода. Следующий пример кода создает экземпляр и использует его для получения ссылки на интерфейс.
После ссылки на интерфейс можно использовать его для компиляции исходных кодов. Вы передаете параметры компилятору с помощью класса. Пример:
В вышеуказанном коде объект использует объект, чтобы сообщить компилятору, что необходимо создать исполняемый файл (в отличие от DLL) и вы хотите вы выводить на диск результативную сборку. Вызов в том месте, где сборка компилироваться. Этот метод принимает объект параметров и исходный код, который является строкой. После компиляции кода можно проверить, были ли ошибки в компиляции. Вы используете возвращаемую ценность от объекта. Этот объект содержит коллекцию ошибок, которая содержит все ошибки, которые произошли во время компиляции.
Существуют другие варианты компиляции, например компиляторинг из файла. Вы также можете пакетной компиляции, что означает, что вы можете компиляции нескольких файлов или источников в то же время.
Putting it all together
Task:
Write a program that accepts a C source file and outputs an executable. The program should:
- Read in the file
- Lex it
- Parse it
- Generate assembly
- Write the assembly to a file
-
Invoke GCC command to convert the assembly to an executable:
In this command, “assembly.s” is the name of the assembly file and “out” is the name of the executable you want to generate. The option tells GCC to build a 32-bit binary. You can omit that option and build 64-bit binaries if you want, but you’ll need to make some changes to the code generation steps later on (e.g. using 64-bit registers).
- (Optional) Delete the assembly file.
Compiler Explorer (Godbolt)
URL | http://godbolt.org |
Compilers | GCC 4.4.7 .. 8.0.0 (snapshot) Clang 3.0 .. 5.0.0 (trunk) MSVC 19/2017 (x86, x64) icc 13, 16, 17 zapcc 190308 PowerPC gcc 4.8, PowerPC 64 6.3.0 MSP430 gcc 4.5.3 .. 6.2.1 MIPS gcc 5.4 (32/64 bit, el) elcc 0.1.33, 0.1.34 AVR gcc 4.5.4, 4.6.4 ARM64 gcc 5.4 ARM gcc 4.5.4 .. 5.4.1 ARM CL 2017 RTW |
C++ Version | C++17* |
Compiler flags | free text |
Runtime parameters | N/A |
Stdin | N/A |
Compiler Explorer is a compile-as-you-type IDE with a unique feature as it presents the assembly produced by the compilers. The resulting assembler can be color-mapped to the originating C++ code. It supports the use of different sources and multiple compilers at the same time, so we can compare the assembly produced by different code and/or different compilers, optimization flags, etc.
Compiler explorer can be found on GitHub and can be used locally.
Currently, the compiled code can not be executed, but there is an open GitHub issue for this feature.
I am continuously amazed by this tool and it’s ease of use. The almost instant compilation, while you type, give the immediate feedback you usually only get from large IDEs. I used Compiler Explorer a lot lately to play around with compile time calculations and to reproduce and reduce a compiler bug or two. It is no wonder that “godbolting some code” has become a term used in certain circles.
Пример пошаговой процедуры
-
Создайте новое приложение Visual C# .NET Windows. Form1 создается по умолчанию.
-
Добавьте кнопку управления в Form1, а затем измените свойство Text на Build.
-
Добавьте другой контроль кнопки в Form1, а затем измените свойство Text для запуска.
-
Добавьте два элементов управления TextBox в Form1, установите свойство Multiline для обоих элементов управления true, а затем размер этих элементов управления, чтобы можно было вклеить несколько строк текста в каждую из них.
-
В редакторе кода откройте исходный файл Form1.cs.
-
В классе в выберите обработник следующей кнопки.
В начале файла добавьте эти утверждения:
-
В Form1.cs найдите конструктор.
-
После вызова в конструктор добавьте следующий код для проводки обработчиком кнопки к обеим кнопкам, добавленным в Form1.
-
Запустите проект. После загрузки Form1 нажмите кнопку Сборка.
Примечание
Вы получаете ошибку компиляторов.
-
Затем скопируйте следующий текст в текстовый ящик, заменив любой существующий текст:
-
Нажмите кнопку Сборка снова. Компилятор должен быть успешным.
-
Нажмите кнопку Выполнить, и он будет компилировать код и запустить в результате исполняемый файл. Компилятор создает исполняемый файл Out.exe, который сохранен в той же папке, что и запущенное приложение.
Примечание
Вы можете изменить код в текстовом ящике, чтобы увидеть различные ошибки компиляторов. Например, удалите один из полу-двоеточий и перестроите код.
-
Наконец, измените код в текстовом ящике, чтобы выработать в окне консоли другую строку текста. Нажмите кнопку Выполнить, чтобы увидеть выход.