Программа для Windows, написанная с использованием MFC, является программой на C ++? - PullRequest
2 голосов
/ 13 июня 2010

Каждая прочитанная мною книга C ++ говорит примерно так: -

  1. Все программы на C ++ имеют функцию main ().
  2. Функция main () является отправной точкойдля всех программ C ++.
  3. Все программы C ++ начинают свое выполнение с функции main ().

Однако я обнаружил, что программы Windows, написанные с использованием MFC, не имеют main ()функция.Он использует функцию WinMain () в качестве отправной точки программы.

Так могу ли я сказать, что программа Windows, написанная с использованием MFC, не является программой C ++?Тогда что это за программа?

Спасибо.

Ответы [ 3 ]

1 голос
/ 13 июня 2010

Нет причины, по которой операционная система (или библиотека времени выполнения) не может решить вызвать другую функцию при запуске программы вместо main(). В этом случае Microsoft сделала это, потому что они хотели передать различные параметры, которые более соответствовали соглашениям о запуске Windows.

В этом нет ничего плохого, вы все еще пишете на C ++, это просто означает, что программа не соответствует стандарту ISO C ++. Конечно, вы немного вышли за рамки стандарта, когда начали вообще использовать MFC.

(Вы столкнулись с настоящей странной ловушкой программирования на C ++. Большинство других языков не имеют такого понятия, как программа, использующая только стандартные возможности языка, но нарушающие стандарт языка. способов попасть в эту странную неопределенность.)

1 голос
/ 13 июня 2010

Ответ на этот вопрос немного сложнее, чем да или нет.Во многом это зависит от того, насколько строго вы даете определение «программе на C ++».Программа подсистемы Windows, созданная с помощью MSVC, обычно не имеет функции main.MFC - это языковая структура C ++ для создания программ подсистемы Windows (по крайней мере, в современной практике).Для целей «Является ли программа написанной без основной функции с использованием компилятора C ++ программой C ++, и если нет, то что это?»MFC не имеет значения.

О функции main можно говорить в терминах «автономных» и «размещенных» реализаций.Стандарт требует, чтобы только «размещенные» реализации имели основную точку входа.Тем не менее, вам будет трудно назвать реализацию Microsoft CRT и языка "автономным" с открытым лицом.

Таким образом, мы могли бы сделать вопрос более конкретным: "Является ли приложение MFC соответствующей, размещенной на C ++ программой?"и ответом на этот вопрос будет «Технически, очень технически, нет», то есть имеют преимущество стандартной библиотеки et.и др.Примеры автономных сценариев могут быть во встроенной системе или ядре операционной системы.Например, при написании ядра ОС вы не можете полагаться на наличие таких функций, как malloc или new, поскольку вы реализуете службы (виртуальную память, процессы и т. Д.), Которые в конечном итоге будут использоваться для реализации таких вещей, как malloc и new.1011 *

1 голос
/ 13 июня 2010

Они все еще являются программами на C ++; main функция определена внутри чего-то, что связано с исполняемым файлом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...