Знаете, я человек не особо компетентный в с++, но по-мойму даже яжу ясно чт main быть void не может!!! или это другая main??? тогда она должна отличаться набором аргументов и типом их.
Приветствую Вас, эдвард самохвалов! Год живу, два еб..сь :) и так далее... Вобще-то может! Если, конечно тебе не нада обрабатывать параметры командной строки (argc, argv) Удачи!
Ответ отправлен: 04.08.2002, 11:16 Отправитель: E$h@ Отвечает Pablo
Приветствую тебя, эдвард самохвалов! Позволю себе не согласится с Артемом, по поводу того что если в функции не указан список параметров то, подразумевается что используется один параметр int! Вот например в Билдере функции void __stdcall Func(); void __stdcall Func1(void); имеют слудующий вид после компиляции @Func$qqsv @Func1$qqsv А при вызове функции Func передаца параметров через стек отсутстсвует. В Turbo Сях там вооьще очен интересные вещи, в любом случае даже есть функция main объявлена как: main(void), в стек передается три параметра. Единственно что они в этой функции не используются просто, и являются прозрачными. В обычные функции параметры передаются также как и в Билдере с типом передачи параметров __cdecl. В этом типе параметры передаются через стек справа налево. А сте восстанавливает после вызова подпрограммы вызвающая
функция. По поводу возвращаемого значения, я так думаю что на него налагается только одно условие, чтобы оно помещалось в регистр ax(eax), т.к. в большинстве случаев используется именно он для возврата результата из подпрограмма. То есть я думаю что объявлять main можно следующими типами: void main(); char main(); short main(); int main(); наряду с беззнаковыми версиями типов. Символ подчеркивания как у main так и у других функций появляется вследствие определенного для них типа передачи параметров __cdecl. Для __stdcall и др. типов этот символ не появляется. Ответ отправлен: 01.08.2002, 16:38 Отправитель: Pablo Отвечает Sinner
Приветствую Вас, эдвард самохвалов! Еще как может!!! Ответ отправлен: 01.08.2002, 04:36 Отправитель: Sinner Отвечает Dzik
Здравствуйте, эдвард самохвалов! Это тот самый Main и он может быть войд. Скорее всего загрузчик С сам проверяет такую ситуацию и подстраивается под нужный формат main(т.е. с параметрами/без параметров, возвращает int/void) Ответ отправлен: 01.08.2002, 06:39 Отправитель: Dzik Отвечает vitya
Доброе время суток, эдвард самохвалов! на самом деле может. По стандарту анси она выглядит так int main() { } однако же есть вариации void main(); int main(int, char**); void main(int, char**); int main(int, char**, char**); void main(int, char**); компиляторы их кушают, но void функции не соответствуют стандарту.
Ответ отправлен: 01.08.2002, 08:30 Отправитель: vitya Отвечает Sensey
Добрый день, эдвард самохвалов! Че это не может? Может же все таки!
Ответ отправлен: 01.08.2002, 09:56 Отправитель: Sensey Отвечает Александр
Здравствуйте, эдвард самохвалов! Ну ежу может и ясно, но на самом деле может быть либо void либо int, а параметры либо void, либо int, char*[]. Не понимаю вообще сути претензий. А функция main в каждой программе своя, так что она всегда немножко другая :-). Т.е. возможны на самом деле 6 вариантов объявления main: void main(void) int main(void) void main(int argc, char * argv[]) int main(int argc, char * argv[]) void main() int main() P.S. Вроде ничего не забыл... P.P.S. RTFM!
Ответ отправлен: 01.08.2002, 10:20 Отправитель: Александр Отвечает Ayl
Добрый день, эдвард самохвалов! Ну, у ежей, возможно, void main быть не может, а в Си - может! Если наша программа не должна возвращать значения в ОС - нафига этим заниматься? Так честно и напишем - не хотим ничего возвращать и не будем! Хотя это не соотвествует стандарту ANSI. Но поддерживается компиляторами. Что такое "другая main"? main - это просто точка начала программы. А вообще она может возвращатть целое значение (типа int) и принимать до 3-х параметров - количество параметров в командной строке, сама командная строка и окружение. Комментарий к ответу эксперта Александр. Видимо, в двух последних описаниях main ты все-таки имел в виду такие: void main (int c, char * argv[], char * env[]); int main (int c, char * argv[], char * env[]); ? Тогда точно ничего не забыл. Просто насколько я понимаю, описания type func (void); и
type func (); суть одно и тоже. Ответ отправлен: 01.08.2002, 11:13 Отправитель: Ayl
Вопрос № 141
Это ответ на вопрос № 140 Эдварда Самохвалова по поводу функции main.
Рассказываю теорию. Функция в тех версиях Си, с которыми я знаком, принимает параметры через стек. При этом первый параметр помещается в стек последним. Этот механизм позволяет передавать дополнительное произвольное число параметров кроме тех, что явно описаны. Примером может служить функция void printf(char *, ...). Если в описании функции не указан список параметров, то подразумевается, что функция принимает один параметр типа int (Ayl здесь ошибся). Аналогично, если не указан тип возвращаемого результата, то подразумевается, что функция возвращает тип int.
Все загрузчики/инициализаторы вызывают _main, а параметры запихивают в стек (обычно это число аргументов и массив указателей на аргументы), при этом ожидают, что функция
вернёт int. Но линкер не знает, как описана функция main, он только видит public _main - и всё! Поэтому смело можешь описывать свою функцию как душе угодно. Я, например наваял такое (см приложение). Вот только изменять параметры не рекомендуется - будут грандиозные проблемы.
Добрый день, Артём Шегеда! должен сказать лишь одно, поведение программы отнюдь не определенно, и даже очень вероятно, что она вылетит. Ответ отправлен: 01.08.2002, 12:56 Отправитель: vitya
Форма отправки вопроса
Внимание!
Форма может работать некорректно в почтовых программах "Microsoft Outlook"
и "Microsoft Outlook Express". В программе The Bat!
подобные формы не работают вообще!
После нажатия на кнопку "Отправить", будет открыто второе окно. Заметьте,
что в некоторых браузерах могут стоять запреты на открытие других
окон, а также "чрезмерное" кэширование данных,
при этом факт отправки Вашего вопроса стоит под сомнением.
Мы рекомендуем открывать рассылку в программе Internet
Explorer 5.0+ или отправлять вопросы с сайта по адресу:
http://rusfaq.ru/cgi-bin/Message.cgi.