Void main c что это
Перейти к содержимому

Void main c что это

Main() и аргументы командной строки

Метод Main — это точка входа приложения C#. (Библиотекам и службам точка входа в виде метода Main не требуется.) Когда приложение запускается, первым вызывается именно метод Main .

В программе на C# может существовать только одна точка входа. Если у вас есть несколько классов с методом Main , программу нужно компилировать с параметром компилятора StartupObject, чтобы указать, какой из методов Main будет использоваться в качестве точки входа. Дополнительные сведения см. в разделе StartupObject (параметры компилятора C#).

Начиная с версии C# 9, можно не указывать метод Main и писать инструкции C# как включенные в метод Main , как показано в следующем примере:

Сведения о написании кода приложения с помощью неявного метода точки входа см. в статье Инструкции верхнего уровня (руководство по программированию на C#).

Обзор

  • Метод Main — это точка входа для выполняемой программы. Это начальный и завершающий этапы управления программой.
  • Main объявляется внутри класса или структуры. Main должно быть static и не public обязательно. (В предыдущем примере он получает доступ private по умолчанию.) Включающий класс или структура не обязательно должны быть статическими.
  • Метод Main может иметь значение void , int или (начиная с C# 7.1) Task , а также тип возвращаемого значения Task<int> .
  • Если только Main возвращает Task или Task<int> , объявление Main может включать модификатор async . В частности, async void Main это исключает метод.
  • Метод Main может быть объявлен с параметром string[] , который содержит аргументы командной строки, или без него. при использовании Visual Studio для создания Windows приложений можно добавить параметр вручную или использовать GetCommandLineArgs() метод для получения аргументов командной строки. Параметры считываются как аргументы командной строки, индексы которых начинаются с нуля. В отличие от C и C++, имя программы не рассматривается как первый аргумент командной строки в массиве args , но является первым элементом метода GetCommandLineArgs().

В следующем списке приведены допустимые Main сигнатуры.

В предыдущих примерах используется public Модификатор доступа. Это обычная, но не обязательная.

Добавление значений async и Task , а также типов возвращаемого значения Task<int> упрощает код программы, когда консольным приложениям требуется запустить и ожидать ( await ) асинхронные операции в Main .

Возвращаемые значения Main ()

Вы можете возвратить int из метода Main , определив метод одним из следующих способов:

Код метода Main Сигнатура Main
Без использования args или await static int Main()
С использованием args , без использования await static int Main(string[] args)
Без использования args , с использованием await static async Task<int> Main()
С использованием args и await static async Task<int> Main(string[] args)

Если значение, возвращаемое методом Main , не используется, возврат void или Task несколько упрощает код.

Код метода Main Сигнатура Main
Без использования args или await static void Main()
С использованием args , без использования await static void Main(string[] args)
Без использования args , с использованием await static async Task Main()
С использованием args и await static async Task Main(string[] args)

Однако возврат int или Task<int> позволяет программе передавать информацию о своем состоянии другим программам и скриптам, которые вызывают исполняемый файл.

В следующем примере показано, как можно получить доступ к коду завершения для процесса.

В этом примере используются программы командной строки .NET Core. Если вы не знакомы с программами командной строки .NET Core, можете обратиться к этой статье по началу работы.

Создайте новое приложение, выполнив dotnet new console . Main Измените метод в Program. CS следующим образом:

При запуске программы в Windows значение, возвращаемое функцией Main , сохраняется в переменной среды. Эту переменную среды можно получить из пакетного файла с помощью ERRORLEVEL или в PowerShell с помощью $LastExitCode .

Вы можете создать приложение, используя команду DotNet CLI dotnet build .

Затем создайте скрипт PowerShell для запуска приложения и отображения результата. Вставьте следующий код в текстовый файл и сохраните его под именем test.ps1 в папке проекта. Запустите скрипт PowerShell, введя команду test.ps1 в командной строке PowerShell.

Так как код возвращает нулевое значение, пакетный файл сообщает об успехе. Но если изменить файл MainReturnValTest.cs, чтобы он возвращал ненулевое значение, и затем повторно скомпилировать программу, то при последующем выполнении скрипта PowerShell будет выдано сообщение об ошибке.

Значения, возвращаемые асинхронным методом main

При объявлении async возвращаемого значения для Main компилятор создает стандартный код для вызова асинхронных методов в Main . Если не указать async ключевое слово, необходимо написать этот код самостоятельно, как показано в следующем примере. Код в примере гарантирует, что программа будет выполняться до завершения асинхронной операции:

Этот стандартный код можно заменить на:

Преимуществом объявления Main As async является то, что компилятор всегда создает правильный код.

Если точка входа приложения возвращает Task или Task<int> , то компилятор создает новую точку входа, которая вызывает метод точки входа, объявленный в коде приложения. Предположим, что эта точка входа называется $GeneratedMain . В этом случае компилятор создает следующий код для этих точек входа:

  • static Task Main() приводит к тому, что компилятор формирует эквивалент private static void $GeneratedMain() => Main().GetAwaiter().GetResult();
  • static Task Main(string[]) приводит к тому, что компилятор формирует эквивалент private static void $GeneratedMain(string[] args) => Main(args).GetAwaiter().GetResult();
  • static Task<int> Main() приводит к тому, что компилятор формирует эквивалент private static int $GeneratedMain() => Main().GetAwaiter().GetResult();
  • static Task<int> Main(string[]) приводит к тому, что компилятор формирует эквивалент private static int $GeneratedMain(string[] args) => Main(args).GetAwaiter().GetResult();

Если бы в примерах использовался модификатор async метода Main , компилятор сформировал бы точно такой же код.

Аргументы командной строки

Вы можете передавать аргументы в метод Main , определив метод одним из следующих способов:

Код метода Main Сигнатура Main
Без возвращаемого значения, без использования await static void Main(string[] args)
С возвращаемым значением, без использования await static int Main(string[] args)
Без возвращаемого значения, с использованием await static async Task Main(string[] args)
С возвращаемым значением, с использованием await static async Task<int> Main(string[] args)

Если аргументы не используются, можно опустить args в сигнатуре метода, чтобы немного упростить код:

Код метода Main Сигнатура Main
Без возвращаемого значения, без использования await static void Main()
С возвращаемым значением, без использования await static int Main()
Без возвращаемого значения, с использованием await static async Task Main()
С возвращаемым значением, с использованием await static async Task<int> Main()

также можно использовать Environment.CommandLine или Environment.GetCommandLineArgs для доступа к аргументам командной строки из любой точки в консоли или в приложении Windows Forms. чтобы включить аргументы командной строки в Main сигнатуре метода в Windows Forms приложении, необходимо вручную изменить сигнатуру Main . код, созданный конструктором Windows Forms, создает Main без входного параметра.

Параметр метода Main — это массив String, представляющий аргументы командной строки. Как правило, определить, существуют ли аргументы, можно, проверив свойство Length , например:

args Массив не может иметь значение null. Поэтому доступ к свойству Length можно получить без проверки значения NULL.

Строковые аргументы также можно преобразовать в числовые типы с помощью класса Convert или метода Parse . Например, следующая инструкция преобразует string в число long с помощью метода Parse:

Можно также использовать тип C# long , который является псевдонимом Int64 :

Кроме того, можно использовать метод класса Convert , ToInt64 :

Дополнительные сведения см. в разделах Parse и Convert.

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

Чтобы скомпилировать и запустить приложение из командной строки, выполните следующие действия.

Вставьте следующий код в любой текстовый редактор, а затем сохраните файл как текстовый файл с именем факториал. CS.

на начальном экране или в меню » пуск » откройте окно Visual Studio Командная строка разработчика , а затем перейдите в папку, содержащую созданный файл.

Введите следующую команду для компиляции приложения.

Если для приложения не выдаются ошибки компиляции, создается исполняемый файл с именем Factorial.exe.

Введите приведенную ниже команду для вычисления факториала числа 3:

Код создает следующие выходные данные: The factorial of 3 is 6.

При выполнении приложения в Visual Studio аргументы командной строки можно указать на странице «Отладка» в конструкторе проектов.

Спецификация языка C#

Дополнительные сведения см. в спецификации языка C#. Спецификация языка является предписывающим источником информации о синтаксисе и использовании языка C#.

Чем отличается в c++ int main() от void main().

Т. е. точка выхода.
Можно ее пропустить, конечно, тогда компилятор автоматически добавит return 0; в конец программы.
Это значение передается вызывающему процессу (например, операционной системе) чтобы он «понял», что программа завершена корректно.

Второй вариант:
void main()

по завершении программы ничего не возвращает, что может привести к различным проблемам.
Это можно обойти с помощью функции exit(<число>);

Но тем не менее, запись void main() не соответствует стандарту и считается некорректной, и некоторые компиляторы ее не принимают.

Первый вариант может возвращать код ошибки.
Второй вариант не может возвращать код ошибки.
Первый вариант будет компилироваться в любом нормальном компиляторе.
Второй вариант будет редко где компилироваться.

Int main C: для чего нужна функция main, прототип в функции Cи

Lorem ipsum dolor

«Int main()» — это выражение, показыва ющее , что в программе присутствует главная функция main(), которая вернет в качестве значения целое число. В программе на С может быть несколько функций, но одна из них обязательно должна быть main(). Без нее программа не будет корректно работать, так как main() является управляющей и основной функцией.

Мы будем очень благодарны

если под понравившемся материалом Вы нажмёте одну из кнопок социальных сетей и поделитесь с друзьями.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *