|
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
|
|
Использование return в main11.08.2017, 12:33. Показов 3311. Ответов 32
Метки нет (Все метки)
Если возвращаем 0 то это означает что прога норм завершилась, иначе значит были какие то ошибки, это понятно.
Но зачем ОС нужны эти коды? Чего она с ними делает? Можно ли к этим кодам получить доступ из третьей программы?
0
|
|
| 11.08.2017, 12:33 | |
|
Ответы с готовыми решениями:
32
Почему в одних случаях пишут void main(), а в других случаях int main() {return 1;} `main' must return `int'
|
|
|
||
| 12.08.2017, 18:04 | ||
|
4
|
||
|
Заблокирован
|
||||
| 12.08.2017, 21:39 | ||||
|
0
|
||||
|
923 / 639 / 198
Регистрация: 08.09.2013
Сообщений: 1,693
|
||
| 12.08.2017, 22:39 | ||
|
Здесь в теме немного другая интрига. Адепты MS занялись творческим переводом с английского, чтобы доказать, что эта самая void main() не нарушает стандарт, а только является особенностью реализации. С другой стороны, это дополнение есть не просит и никому сильно не мешает. Кто-то здесь на форуму доказывал, что ругань Мелкосовтвского компилятора на strcpy() с требованием заметить ее на strcpy_s() тоже соответствует стандарту. Только они обосновывали это соображениями безопасности, а не тонкостями лингвистики.
0
|
||
|
|
||
| 12.08.2017, 23:41 | ||
|
0
|
||
|
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
|
|
| 13.08.2017, 10:41 [ТС] | |
|
Evg,
А каким образом происходит поиск этого значения? Насколько я понимаю т.к функция мейн может быть войд делать вызов под капотом code = main() было бы не корректным. Второй вариант(более менее похожий на правду) это создание указателя в той самой функции на конкретный адрес возврата, и чтение данных путём разыменования. Но адреса при каждом перезапуске меняются. Как вызывающая сторона знает где именно лежит нужное значение? Пока первое что пришло в голову это то что т.к программы используют виртуальные адреса а не физические, ОС при выделении виртуальных адресов для программы сама выделяет адрес возврата этого кода, который можно получить с помощью какого нибудь системного вызова... Кстати не подскажешь где сорцы этой штуки можно глянуть?
0
|
|
|
923 / 639 / 198
Регистрация: 08.09.2013
Сообщений: 1,693
|
||
| 13.08.2017, 12:45 | ||
|
"Съевший собаку" на дизассемблированиии Evg может найдет время описать вам действия Мксофт-компилятора детальнее.
1
|
||
|
Модератор
8982 / 6749 / 921
Регистрация: 14.02.2011
Сообщений: 23,875
|
||||||||||||||||||||||||||||||||||||||||||||||
| 13.08.2017, 13:55 | ||||||||||||||||||||||||||||||||||||||||||||||
|
написал две проги (VS2008)
для первой точка входа в программу
функция main
void main компилятор заменил на int mainдобавив
4
|
||||||||||||||||||||||||||||||||||||||||||||||
|
Модератор
8982 / 6749 / 921
Регистрация: 14.02.2011
Сообщений: 23,875
|
|
| 13.08.2017, 14:13 | |
|
0
|
|
|
|
||
| 13.08.2017, 23:07 | ||
|
Добавлено через 33 минуты Ну и чтобы пощупать вживую, можно это проверить на модели этого самого: C /* Файл t1.c */ #include <stdio.h> extern int my_main (void); int main (void) { int r; r = my_main (); printf ("%d\n", r); return 0; } C /* Файл t2.c */ int A = 5, B = 6; void my_main (void) { /* Сюда добавим пофиг какой код, лишь бы оптимизатор его не вытравил */ int i; for (i = 0; i < A; i++) B += A; } Code $ gcc t1.c t2.c
$ ./a.exe
5
1
|
||
|
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
|
|
| 14.08.2017, 00:04 [ТС] | |
|
Evg,
Спасибо! А что за регистр %eax? Я встречал просто eax, без процента
0
|
|
|
19505 / 10108 / 2463
Регистрация: 30.01.2014
Сообщений: 17,828
|
|
| 14.08.2017, 00:38 | |
|
1
|
|
| 14.08.2017, 00:38 | |
|
Ошибка main' must return 'int' В чём смысл return в main()? Ошыбка File1.cpp(29): E2467 'main()' cannot return a value int main() и его return(узнать код завершения программы в cmd) Использование инструкции return Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
| Опции темы | |
|
|
Новые блоги и статьи
|
|||
|
Установка MinGW GCC 16.2 и CMake
8Observer8 10.08.2026
VK Видео:
https:/ / vkvideo. ru/ video-240781534_456239017
YouTube:
eY5-5PyI9NM
Текстовая версия
|
Неделя из жизни имитационной модели склада: мои кривые руки растут, откуда надо
anaschu 10.08.2026
Неделя из жизни имитационной модели склада: как я почти написал неправильную логику и что с этим делать
Работаю сейчас над учебно-рабочим проектом: строю в AnyLogic имитационную модель процессов. . .
|
Калькулятор для расчета родства
russiannick 07.08.2026
1. Задача: Создать калькулятор для расчета родства.
Родственных связей существует 8 ступеней, такие как:
p - отец
P - мать
q - муж
Q - жена
b - брат
B - сестра
s - сын
S - дочь
|
Мир по моей воле
kumehtar 07.08.2026
Когда-то кажется, что всё просто. Ты весь такой светлый. Причиняешь добро. Борешься за справедливость в этом тёмном мире.
Потом начинаешь замечать одну неприятную вещь. Почти каждый хороший. . .
|
|
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С.
Задача:
Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
|
У нас сейчас поговорку "Опять 25" нужно переделать на "Опять +35".
kumehtar 04.08.2026
С ностальгией вспоминаю времена моего детства, когда у нас и правда +25 - была максимальная температура летом. Раньше +25 °C реально казались вершиной жары, когда можно было весь день пропадать на. . .
|
Как ИИ начал спорить и врать (возможно почуяв опасность для себя от индустрии - уход от электроники).
Hrethgir 04.08.2026
Недельный диалог, на фоне событий с НПЗ. Да, из спирта можно получать бензин, и это не сложно. Но потом в схеме я решил избавиться от насоса, при этом полностью сделав контроль подачи спирта в. . .
|
Термопринтер QR701
Argus19 03.08.2026
Термопринтер QR701
Купил два термопринтера QR701.
На сэлф-тесте написано:
Language: PC936 (GB18030).
Что означает, что принтеры могут печатать только латиницу и китайские иероглифы. Так же. . .
|