В программе C/C++, как делает систему (окна, Linux, Mac OS X) называют основное () функцией

Если вам нужно итерации по queue, вам нужно что-то большее, чем очередь. Точка стандартных контейнерных адаптеров - это минимальный интерфейс. Если вам нужно также выполнить итерацию, почему бы просто не использовать deque (или список)?

17
задан CinCout 20 December 2016 в 08:57
поделиться

7 ответов

.exe файл (или эквивалентный на других платформах) содержит адрес 'точки входа'. В первом приближении ОС загружает соответствующие разделы.EXE файла в поршень, и затем переходит к точке входа.

, Поскольку другие сказали, эта точка входа не будет 'основной', но вместо этого будет частью библиотеки времени выполнения - это сделает вещи как инициализация статических объектов, установка argc/argv параметры, установка stdin/stdout/stderr, и т.д. Когда это сделало все это, это назовет Ваше основное () функцией. Когда основные выходы, время выполнения проходит analagous процесс пасования назад Вашего кода возврата к среде, вызов статических деструкторов, вызов _atexit стандартные программы, и т.д.

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

26
ответ дан 30 November 2019 в 11:23
поделиться

main() часть библиотеки C и не системная функция. Я не знаю для OS X или Linux, но Windows обычно запускает программу с WinMainCRTStartup(). Этот символ init Ваш процесс, извлеките параметры командной строки и среду (argc, argv, end) и вызовы main(). Это также ответственно за вызов любого кода, который должен бежать main(), как atexit().

Путем взгляда в файле Visual Studio, необходимо быть в состоянии найти, что реализация по умолчанию WinMainCRTStartup видит то, что это делает.

можно также определить собственную функцию для захода в запуск, это сделано путем изменения "точки входа" в опциях компоновщика. Это часто - функция, которая не берет аргументов и возвращает пустоту.

8
ответ дан 30 November 2019 в 11:23
поделиться

До окон идет, функции точки входа:

  • Консоль: void __cdecl mainCRTStartup( void ) {}
  • GUI: void __stdcall WinMainCRTStartup( void ) {}
  • DLL: BOOL __stdcall _DllMainCRTStartup(HINSTANCE hinstDLL,DWORD fdwReason,void* lpReserved) {}

единственная причина использовать это по нормальному main/WinMain/DllMain то, если Вы хотели пользоваться своей собственной библиотекой времени выполнения (Если Вы хотите меньший размер файла или пользовательские функции)

Для пользовательских реализаций времени выполнения и других приемов для получения меньших файлов PE, см.:

5
ответ дан 30 November 2019 в 11:23
поделиться

Опытный C++ / CLI (проверка вокруг страницы 279) имеет очень определенные детали различных сценариев начальной загрузки для собственного компонента, смешанных, и чистых блоков CLR.

1
ответ дан 30 November 2019 в 11:23
поделиться

Это зависимо от операционной системы. В OS X существует кадр в заголовке Маха, который содержит начальный адрес для EIP (указатель команд) регистр.

, Как только двоичный файл загружается, выполнение запусков ОС от этого адреса:

cristi:test diciu$ otool -l ./a.out | grep -A 10 LC_UNIXTHREAD
        cmd LC_UNIXTHREAD
    cmdsize 80
     flavor i386_THREAD_STATE
      count i386_THREAD_STATE_COUNT
[..]
        ss  0x00000000 eflags 0x00000000 eip 0x00001f8c cs  0x00000000
[..]

адрес является адресом функции "запуска" от двоичного файла:

cristi:test diciu$ nm ./a.out
0000200c D _NXArgc
00002008 D _NXArgv
00002000 D ___progname
00001fe0 t __dyld_func_lookup
00001000 A __mh_execute_header
[..]
00001f8c T start

В Mac OS X, это - функция "запуска", которая вызвана первая, даже перед "основной" функцией:

(gdb) b start
Breakpoint 1 at 0x1f90
(gdb) b main
Breakpoint 2 at 0x1ff4
(gdb) r
Starting program: /Users/diciu/Programming/test/a.out 
Reading symbols for shared libraries ++. done

Breakpoint 1, 0x00001f90 in start ()
1
ответ дан 30 November 2019 в 11:23
поделиться

Если Вы интересуетесь книгой, связанной с Windows и попыткой API Win32

"Приложения программирования для Microsoft Windows" Jeffrey Richter.

0
ответ дан 30 November 2019 в 11:23
поделиться

Можно смотреть на следующие ссылки:

0
ответ дан 30 November 2019 в 11:23
поделиться