[W systemie Windows Programming] Dlaczego nie punkt wejścia aplikacja nazywa główny? Po pierwsze, nazwa główna została już zajęta, a system Windows nie miał uprawnień do rezerwowania alternatywnej definicji. Nie było wtedy komitetu normalizacyjnego w języku C; C było , co Dennis powiedział, że było, i nie można było zagwarantować, że Dennis podejmie specjalne kroki w celu zachowania kompatybilności kodu źródłowego Windows w dowolnej przyszłej wersji języka C. Ponieważ K & R nie określił, że implementacje mogą rozszerzyć akceptowalne formularze głównej funkcji, było całkowicie możliwe, że istnieje legalny kompilator C C, który odrzucał programy, które zadeklarowały główne niepoprawnie.Standardowy język prąd C wyraźnie zezwala wdrożeniowe specyficzne alternatywne definicje głównym, ale wymagająca wszystkie kompilatory wspierać ten nowy Windows konkretnej wersji w celu opracowania programów Windows byłby nieuzasadniony ograniczać zestaw kompilatorów można użyć do piśmie Programy systemu Windows.
Jeśli udało się pokonać tę przeszkodę, to masz problem, że wersja Windows główny musiałoby być coś takiego:
int main(int argc, char *argv[], HINSTANCE hinst,
HINSTANCE hinstPrev, int nCmdShow);
Ze względu na sposób wiązania C przeprowadzono wszystkie warianty funkcji musiały się zgadzać ze wspólnymi parametrami. Oznacza to, że wersja Windows musiałaby dodać swoje parametry na końcu najdłużej istniejącej wersji głównej, a następnie musiałbyś przeciąć palcami i mieć nadzieję, że w języku C nigdy nie dodano kolejnej alternatywnej wersji głównej. Jeśli podążyłeś tą trasą, twoje skrzyżowane palce cię zawiodły, ponieważ okazało się, że trzeci parametr został później dodany do głównej wersji i to kolidowało z wersją przyjazną dla Windows.
Załóżmy, że udało ci się przekonać Dennisa, aby nie zezwolił na trzyparametrową wersję głównej wersji. Nadal musisz wymyślić te dwa pierwsze parametry, co oznacza, że kod startowy każdego programu musi zawierać parser wiersza poleceń. Powrót w 16-bitowych dniach, ludzi skakało, aby zapisać każdy bajt. Mówiąc im "Och, a wszystkie twoje programy będą większe o 2KB" prawdopodobnie nie sprawiłoby Ci wiele znajomych. Mam na myśli to, że cztery sektory wejścia/wyjścia z dyskietki!
Ale prawdopodobnie powodem, dla którego punkt wejścia systemu Windows otrzymał inną nazwę , jest podkreślenie, że jest to środowisko wykonawcze inne niż środowisko wykonawcze . Jeśli byłby nazywany głównym, ludzie mogliby pobrać programy w języku C zaprojektowane dla środowiska konsoli, wrzucić je do swojego kompilatora Windows , a następnie uruchomić je z katastrofalnymi rezultatami.
Mam nadzieję, że rozwiąże to Twoje wątpliwości.
Jaka jest kolejność wykonywania w przypadku konsoli i aplikacji GUI? Czy część statyczna różni się w tych dwóch przypadkach? Gdzie znajduje się środowisko wykonawcze C? –
Najpierw wykonuje się część statyczną, a następnie wywołuje zaimplementowany przez użytkownika punkt wejścia. Może być różny lub może być taki sam, ale linker może łączyć wywołanie z różnymi punktami wejścia w zależności od ustawień. Możesz myśleć o tej statycznej części, ponieważ jest ona częścią środowiska wykonawczego C. – sharptooth