Несколько вопросов по WinMain - PullRequest
0 голосов
/ 18 сентября 2010

У меня есть несколько очень простых вопросов. Я искал их в Интернете, но нашел разные ответы, поэтому я просто хочу знать, что им следовать.

Итак, во-первых, я считаю, что WinMain НЕ является стандартом C или C ++, а добавляется только Microsoft, чтобы определить, когда загружать другой код запуска CRT, я прав?

И, во-вторых, WinMain вызывается операционной системой, в некотором смысле, аналогично динамической компоновке, или это просто точка запуска программы, как main?

Почему я спрашиваю? Я в основном использовал C для программирования MCU. Я более ориентирован на HW, чем на SW, поэтому мне нравятся микроконтроллеры, я нахожу их и программирую для них более «ясно».

Но когда я начал интересоваться самим языком C и его стандартом, я обнаружил, что это очень сложно. Я имею в виду, например, в MCU, что вам не нужен тип возврата int для main, а также в приложении win32 вам нужен код запуска, отличный от чистого main.

Итак, мне нравится C, но я считаю его стандарт каким-то старым. Спасибо.

Ответы [ 2 ]

1 голос
/ 18 сентября 2010

Хотя это все то же самое, рассмотрим C как 3 языка:

  1. Стандартный свободный стоящий
  2. Стандартная размещенная реализация
  3. Расширенная размещенная реализация

То, что вы описываете (WinMain), относится к типу 3.

Программы типа 3 работают на компьютерах, которые описывают конкретные расширения, которые они используют

Тип 2 имеет много правил, но дает гарантию, что программы, написанные для этого типа, будут работать одинаково на любой компьютерной системе со стандартным компилятором C (практически на каждом компьютере с подключенной клавиатурой (включая КПК, наручные часы, .., ...)).

Тип 1 аналогичен типу 2, за исключением нескольких правил и стандартной библиотеки, и он должен работать для каждого процессора на Земле.

Текст стандарта: 1999 2001 2004 2007. PDF-файл можно найти на сайте ISO (http://www.open - std.org/jtc1/sc22/wg14/www/standards)

1 голос
/ 18 сентября 2010

Я считаю, что WinMain НЕ является стандартом C или C ++, но добавляется только Microsoft, чтобы определить, когда загружать другой код запуска CRT, я прав?

Да. Все стандарты C и C ++ определяют main() (и только main()) в качестве точки входа в программу (хотя ее точная подпись может различаться в зависимости от языка и стандартной версии).

И, во-вторых, WinMain вызывается операционной системой, в некотором смысле, аналогично динамической компоновке, или это просто точка запуска программы, как main?

На самом деле он вызывается с main(). * * * * * * * * * * * * * В программах Windows * main(), скрытый глубоко в коде WinAPI.

...