- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
#include <iostream>
#include <conio.h>
#include <clocale>
using namespace std;
int files; int disc_D(); int disc_E(); int disc_C();
int resursefunction()
{char s;
cout << "Выберите диск" << endl;
cout <<"1-D:\\" << endl;
cout <<"2-C:\\" << endl;
cout <<"3-E:\\" << endl;
cout <<"0 - рабочий стол" << endl;
cin >> s;
if(s == '1') return disc_D();
if(s == '2') return disc_C();
if(s == '3') return disc_E();
if(s == '0') return main();
_getch();}
int main()
{ char vibor;
setlocale( LC_ALL, "Russian" );
cout << "\t\t\t\tРабочий стол" << endl;
cout << "\n\n";
cout << "1-Управление ресурсами" << endl;
cout << "2-Программы" << endl;
cout << "3-Игры" << endl;
cout << "4-Выход из системы" << endl;
cin >> vibor;
if(vibor == '1') resursefunction();
_getch();
return main();}
int disc_D()
{ int res, a;
char vv;
cout << "D:\\" << endl;
cout << "На диске" << endl;
cout << "5 - папок" << endl;
cout << files << " - файлов" << endl;
cout << "1 - создать файл" << endl;
cout << "2 - удалить файл" << endl;
cout << "0 - назад" << endl;
cin >> vv;
if(vv == '1')
{cout << "Введите сколько создать файлов"; cin >> a; res = files + a;
res = files + a;}
if(vv == '2')
{cout << "Введите сколько удалить файлов"; cin >> a; res = files - a;
res = files - a;}
if(vv == '0') return resursefunction();
files = res;
return disc_D();}
int disc_E()
{
int res, a;
char vv;
cout << "E:\\" << endl;
cout << "На диске" << endl;
cout << "7 - папок" << endl;
cout << files << " - файлов" << endl;
cout << "1 - создать файл" << endl;
cout << "2 - удалить файл" << endl;
cout << "0 - назад" << endl;
cin >> vv;
if(vv = '1')
{cout << "Введите сколько создать файлов"; cin >> a; res = files + a;
res = files + a;}
if(vv == '2')
{cout << "Введите сколько удалить файлов"; cin >> a; res = files - a;
res = files - a;}
if(vv == '0') return resursefunction();
files = res;
return disc_E();}
int disc_C()
{int res, a;
char vv;
cout << "C:\\" << endl;
cout << "На диске" << endl;
cout << "5 - папок" << endl;
cout << files << " - файлов" << endl;
cout << "1 - создать файл" << endl;
cout << "2 - удалить файл" << endl;
cout << "0 - назад" << endl;
cin >> vv;
if(vv = '1')
{cout << "Введите сколько создать файлов"; cin >> a; res = files + a;
res = files + a;}
if(vv == '2')
{ cout << "Введите сколько удалить файлов"; cin >> a; res = files - a;
res = files - a; }
if(vv == '0') return resursefunction();
files = res;
return disc_C();}
Еще нашел на форумах. К сожалению форматирование пришлось убить, иначе оно не помещалось целиком
Soul_re@ver 23.12.2013 09:35 # +3
И подключать conio.h только из-за _getch() — говноедство
bormand 23.12.2013 09:50 # +3
На гцц не должно вылететь, он умел в tail-call optimisation.
laMer007 23.12.2013 11:14 # 0
Только с включенной оптимизацией.
bormand 23.12.2013 12:08 # +1
laMer007 23.12.2013 12:23 # +5
inkanus-gray 23.12.2013 14:59 # +4
bormand 23.12.2013 16:29 # +4
Yuuri 23.12.2013 12:04 # +3
Хотя нет, атипичная, рекурсия всё-таки.
Abbath 24.12.2013 01:29 # 0
bormand 23.12.2013 09:48 # 0
kegdan 23.12.2013 11:02 # +2
roman-kashitsyn 23.12.2013 11:04 # +4
bormand 23.12.2013 11:06 # 0
kegdan 23.12.2013 14:41 # +2
bormand 23.12.2013 16:20 # +8
system - наследие от 16-битки
system32 - 64(!) битные файлы
syswow64 - 32(!) битные файлы
kegdan 23.12.2013 16:23 # +3
inkanus-gray 23.12.2013 15:00 # +1
bormand 23.12.2013 16:12 # +1
inkanus-gray 23.12.2013 19:38 # +5
LispGovno 24.12.2013 21:20 # 0
А я вот их кроме как в книжке Нортона (или кого там) только видел. Мне уже достались только io.sys и msdos.sys в моем досе. Правда что в IBMBIO.SYS была большая часть того что сейчас в BIOS?
inkanus-gray 25.12.2013 15:50 # 0
io.sys = ibmbio.sys = drbio.sys = ptsbio.sys = rombio.sys
msdos.sys = ibmdos.sys = drdos.sys = ptsdos.sys = romdos.sys
Предназначено для разжигания холиваров на тему, DOS какого производителя круче. Кстати, в MS-DOS 7.x-8.x, который встроен в Windows 95/98/Me всего один файл IO.SYS, а в Free DOS — только KERNEL.SYS, а второй (msdos.sys) разжалован за ненадобностью.
Yuuri 24.12.2013 11:08 # 0
bormand 24.12.2013 12:03 # 0
Зачем при этом форматировать диск? Достаточно же с любого Живого Компактного Диска просто удалить windows/program files и т.п.
kegdan 24.12.2013 12:21 # 0
bormand 24.12.2013 12:45 # 0
И передавать по наследству от отца к сыну.
kegdan 24.12.2013 12:48 # 0
Yuuri 24.12.2013 14:09 # +2
1024-- 24.12.2013 14:07 # +1
А вообще, эта традиция пошла из-за засранности диска и вирусов? Или из-за "халявной дефрагментации"?
bormand 24.12.2013 14:58 # +1
Ну я вот грузился с dos'овской дискетки, переименовывал windows, program files, docs & settings, затем ставил винду, и уже из винды выносил из тех папок лишнее... Но кому хотелось так извращаться? Вот и форматировали все к хуям.
anonimb84a2f6fd141 24.12.2013 20:28 # 0
bormand 24.12.2013 21:07 # +1
LispGovno 24.12.2013 21:21 # 0
Lure Of Chaos 25.12.2013 02:54 # 0
anonimb84a2f6fd141 25.12.2013 16:53 # 0
pelmenka 23.12.2013 11:29 # +1
bormand 23.12.2013 12:09 # +1
pelmenka 23.12.2013 12:31 # 0
TarasB 23.12.2013 13:23 # +7
kegdan 23.12.2013 14:42 # +3
inkanus-gray 23.12.2013 14:57 # 0
WGH 23.12.2013 15:09 # 0
bormand 23.12.2013 16:51 # +1
Можно ;) Ну правда в других функциях 0 не подразумевается, и вернет что-нибудь другое, что под руку попадется. Где-то здесь даже был пример возвращающего правильное значение (при -O2) кода из лабы:
WGH 23.12.2013 16:55 # 0
bormand 23.12.2013 16:58 # +1
Ну и если код никогда не дойдет до этой точки, то UB'а не будет. И некоторым людям нравится (мне не нравится), что кресты и сишка, в отличие от жабы не заставляет дописывать в таких случаях бесполезный return или throw...
Эту херню с возвратом 0 из main'а прикрутили в с99 и почему-то в крестах. Я честно не понимаю, зачем это нужно, особенно в крестах. Видимо совместимость с каким-нибудь говном мамонта.
kegdan 23.12.2013 15:40 # −1
bormand 23.12.2013 16:46 # +1
Т.е. ты конечно можешь сказать линкеру, что тебе нужна другая точка входа. Но получится совсем не то, что ты хотел :)
kegdan 23.12.2013 17:08 # −2
bormand 23.12.2013 17:12 # 0
inkanus-gray 23.12.2013 20:00 # +1
В gcc вызов main() зашит в модуль crt1.o. Если заменить этот модуль на свой, то можно вызвать функцию с любой сигнатурой, с какой захотим.
Вот аналогичный пример из Watcom C (где-то в недрах clib3s.lib есть cmain386.obj):
А вот пример из MSVC (где-то в глубинах libcmt.lib лежит модуль crt0.obj):
P.S. В Борман Си аналогичный фрагмент в c0x32.obj.
laMer007 23.12.2013 18:17 # +4
MS VS:
mainCRTStartup (or wmainCRTStartup)
WinMainCRTStartup (or wWinMainCRTStartup)
or
_DllMainCRTStartup
laMer007 23.12.2013 18:19 # +3
bormand 23.12.2013 18:59 # +1
inkanus-gray 23.12.2013 20:14 # +1
laMer007 23.12.2013 20:19 # 0
В основном конструкторы статических объектов.
inkanus-gray 23.12.2013 20:30 # 0
kegdan 24.12.2013 01:37 # 0
хорошо что не vizbor