Чем плох void main?
Встретил мнение, что void main() — не канон и даже плохо. Но статья древняя, 1996 года, и даже автор открестился, сказав, что для новых спецификаций это все более и более неактуально. Не стану приводить ссылку, не суть важно.
Поделитесь опытом, профессоры, почему нельзя или нежелательно описывать main() как void? Спасибо
В чем разница между int main()<> и int main(void)<>?
Только недавно начал изучать язык, и появилось несколько вопросов: 1) в чем разница между int.
Какой новые синтаксис: int main() VS. void main()
Долго не занимался программированием , но тут жена решила поучится , да и сам повторить ,так вот.
Какая разница между int main и void main?
какая разница между (int main) i (void main)?
Решение
не по стандарту.
это — фишка исключительно компиляторов cl(visual studio)
нет ни одной причины,
на ровном месте писать не портируемый код.
Решение
одного этого факта достаточно, дальше можно не объяснять. Я яро за как можно большую универсальность (ну, переносимость)
Добавлено через 2 минуты
Кстати, забыл воспользоваться поиском (давно не задавал вопросов), извиняюсь, если кросспостинг
Вот товарищ Герберт Шилдт считает, что функция main() должна вид int main() < return 0; >.
Void main or Int main
Как правильнее использовать void или int в main? И обязательно возвращать return 0 в конце.
От void main() к int main()
Ребят, недавно начал обучаться программированию на cpp на Windows. Перешёл на Mac ( Да, знаю, что.
Чем плох make?
Дали написать реферат по make файлам и соответственно указать его минусы, а значит сравнить его с.
Источник
Почему метод static void Main дает ошибку?
почему метод static void Main дает ошибку?
Помощь в написании контрольных, курсовых и дипломных работ здесь.
static void Main(string[] args)
Что такое string args в строке static void Main(string args) и зачем это писать, если void.
Перегрузите метод f так, чтобы соответствовала виду static void f (double x, out double y)
ПОМОГИТЕ!! Выдаёт ошибку! До передачи управления из текущего метода выходному параметру «y» должно.
Как сделать метод, чтобы он соответствовал заданию? class Program < static double.
Перегрузите метод f так, чтобы его сигнатура (заголовок) соответствовала виду static void f (double x, out double y)
Перегрузите метод f так, чтобы его сигнатура (заголовок) соответствовала виду static void f (double.
Решение
Для начала у вас в коде в 1 посте слишком рано закрывается скобка класса.
В коде ниже вы вызываете не ту функцию вы вызываете MassivMaxElement а у вас MassivMaxElementi
Добавлено через 1 минуту
Как исправить ошибку «Program does not contain a static ‘Main’ method»
Просто взял и переписал пример из книги Шилдт.Г С#4.0 полное руководство ,вот пример using System;.
Волновой алгоритм выдает ошибку «Does not contain a static Main method»
Вот код это волновой алгоритм вроде написано все правильно но выдает ошибку does not contain a.
форумчане помогите пожалуйста с решением задач. есть примеры, я недавно изучаю с# поэтому не.
Код дает ошибку в VS — подчеркивает Console — почему?
Доброго дня. По Шилдту штудирую книгу и первый же код дает ошибку в VS — подчеркивает Console -.
Источник
Почему не работает код?
Error: Main method not found in class Lesson4.BankAccount, please define the main method as:
public static void main(String[] args)
or a JavaFX application class must extend javafx.application.Application
Command execution failed.
org.apache.commons.exec.ExecuteException: Process exited with an error: 1 (Exit value: 1)
at org.apache.commons.exec.DefaultExecutor.executeInternal (DefaultExecutor.java:404)
at org.apache.commons.exec.DefaultExecutor.execute (DefaultExecutor.java:166)
at org.codehaus.mojo.exec.ExecMojo.executeCommandLine (ExecMojo.java:764)
at org.codehaus.mojo.exec.ExecMojo.executeCommandLine (ExecMojo.java:711)
at org.codehaus.mojo.exec.ExecMojo.execute (ExecMojo.java:289)
at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo (DefaultBuildPluginManager.java:137)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:210)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:156)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:148)
at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:117)
at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:81)
at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build (SingleThreadedBuilder.java:56)
at org.apache.maven.lifecycle.internal.LifecycleStarter.execute (LifecycleStarter.java:128)
at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:305)
at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:192)
at org.apache.maven.DefaultMaven.execute (DefaultMaven.java:105)
at org.apache.maven.cli.MavenCli.execute (MavenCli.java:957)
at org.apache.maven.cli.MavenCli.doMain (MavenCli.java:289)
at org.apache.maven.cli.MavenCli.main (MavenCli.java:193)
at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0 (Native Method)
at jdk.internal.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:62)
at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke (Method.java:564)
at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced (Launcher.java:282)
at org.codehaus.plexus.classworlds.launcher.Launcher.launch (Launcher.java:225)
at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode (Launcher.java:406)
at org.codehaus.plexus.classworlds.launcher.Launcher.main (Launcher.java:347)
————————————————————————
BUILD FAILURE
————————————————————————
Total time: 2.691 s
Finished at: 2020-08-04T16:59:56+03:00
————————————————————————
Failed to execute goal org.codehaus.mojo:exec-maven-plugin:1.5.0:exec (default-cli) on project mavenproject1: Command execution failed.: Process exited with an error: 1 (Exit value: 1) -> [Help 1]
To see the full stack trace of the errors, re-run Maven with the -e switch.
Re-run Maven using the -X switch to enable full debug logging.
Источник
int main() VS void main()
Вот товарищ Герберт Шилдт считает, что функция main() должна вид
Т.е. в случае удачи выполнения программы должен возвращаться ноль.
Но я лично симпатизирую варианту
Добавлено через 50 секунд
Симпатизирую из-за компактности.
Помощь в написании контрольных, курсовых и дипломных работ здесь.
В чем разница между int main()<> и int main(void)<>?
Только недавно начал изучать язык, и появилось несколько вопросов: 1) в чем разница между int.
Какой новые синтаксис: int main() VS. void main()
Долго не занимался программированием , но тут жена решила поучится , да и сам повторить ,так вот.
Какая разница между int main и void main?
какая разница между (int main) i (void main)?
int main() или int main(void)?
чем отличается : не сообщаю о наличии аргументов функция не принимает никаких аргументов.
Ну это, как бы, истина!
Добавлено через 44 секунды
Я, лично, изпользую
Решение
«Думать головой» — в Вашем понимании, это неукоснительное соблюдение стандартов? А в моём — как раз наоборот)) Что плохого в void main ?
«Ну в первом случае — это main — это главная функция, которая, по — хорошему, должна что-то возвращать!»
А кто сказал, что она должна что-то возвращать?
[QUOTE=ramses;1599499]»Думать головой» — в Вашем понимании, это неукоснительное соблюдение стандартов? А в моём — как раз наоборот)) Что плохого в void main ?
Добавлено через 2 минуты
Ну в первом случае — это main — это главная функция, которая, по — хорошему, должна что-то возвращать!
А кто сказал, что она должна что-то возвращать?
Ну собственно почему бы и нет? по моему она нужна для
выпoлняется глaвный цикл трaнсляции (это не что-то возвращать?)
Если бы там ещё аргументы этой функции были указаны, то можно было бы с нулём по варьировать.
P.S. или я ничего не поняла?
Решение
Не-а! Вот так тоже можно, мало того — порой нужно даже!
Other platform-dependent formats are also allowed by the C and C++ standards, except that in C++ the return type must stay int; for example, Unix (though not POSIX.1) and Microsoft Windows have a third argument giving the program’s environment, otherwise accessible through getenv in stdlib.h:
Mac OS X and Darwin have a fourth parameter containing arbitrary OS-supplied information, such as the path to the executing binary:
«ramses, странный вы человек все-таки)»
Ога, есть во мне такое) Эх.. Буду я первое время плеваться, когда int main() использовать.
З.Ы. Visual C++ пропускает, гад..
Решение
Когда вызываешь malloc, то по хорошему надо бы проверить результат на NULL. Но это не обязаловка. Когда вызываешь free, то по хорошему надо бы после этого обнулить указатель, но это не обязаловка. С main’ом то же самое. Ты будешь экономить 10 символов в исходнике до тех пор, пока не промудо. ешься полдня и не поймёшь, что иногда лучше лишний раз написать лишних 10 символов, чем терять много времени на поиск ошибки. А потому пиши так, как считаешь уместным. Человек должен учиться на собственных ошибках. Есть пословица «дурак учится на своих ошибках, а умный — на чужих», но она не всегда себя оправдывает
g++ — это всё-таки язык Си++ с более жёсткими стандартами, чем в Си, где в этом отношении полный бардак
От void main() к int main()
Ребят, недавно начал обучаться программированию на cpp на Windows. Перешёл на Mac ( Да, знаю, что.
Void main or Int main
Как правильнее использовать void или int в main? И обязательно возвращать return 0 в конце.
Источник
Ересь в виде void main(), использование функции main
Функция main() возвращает тип int. Если вы уже это знаете, то и не читайте.
Если вы присвоите функции main() тип возврата, отличный от int, то в компиляторах, предшествующих компиляторам С99, вы получите неопределенное поведение своей программы. В компиляторах С99 вы получите неспецифицированное поведение, если так говорит реализация версии, или неопределенное поведение — если она этого не делает. Доверяете ли вы своей программе в этом отношении?
Многие просто не верят мне, когда я говорю им это (точно так же, как не верил я, когда впервые узнал об этом). Частично это связано с тем, что несколько широко известных учебников по С и, по крайней мере, по одной авторитетной программе-компилятору используют void main() с тревожной регулярностью. Ниже приведена формулировка стандарта С99 (который фактически чуть более снисходителен, чем стандарт С89, который вам, возможно, более знаком):
либо с двумя параметрами (здесь они называются argc и argv, хотя можно использовать любые имена в том порядке, как они размещены в функции, в которой объявлены):
int main (int argc, char *argv[] ) < /* . */ >
либо некоторым другим определенным реализацией способом».
5.1.2.2.3. Завершение программы. Если возвращаемый главной функцией тип является типом, совместимым с int, то возврат в главную функцию эквивалентен вызову функции выхода со значением, возвращенным главной функцией в качестве ее аргумента; при достижении скобки >, которая завершает главную функцию, возвращается значение 0. Если возвращаемый тип несовместим с типом int, состояние завершения, возвращаемое в хост-среду, является неспецифицированным».
В данном контексте «неспецифицированный» означает, что стандарт не требует какого-либо специфического поведения от компилятора, который волен возвратить в хост-среду (обычно это операционная система) любое состояние, какое ему нравится, и это применяется, только если документами реализации установлено, что она поддерживает возвращаемые из main () типы, отличные от int. Если у вас пустая (void) главная функция main () и вы пишете код для ядерного реактора или военного самолета, вы, возможно, почувствуете легкую нерешительность, и я не виню вас. Кроме того, определение main () для возврата типа void (пустой) не является синтаксической ошибкой или нарушением ограничения, так что компилятор не обязательно должен выдавать какое-либо диагностическое сообщение.
Давайте посмотрим на это несколько под иным углом. Рассмотрим четвертый аргумент функции сортировки qsort. Он специфицирован как указатель на некую функцию сравнения, принимающую в качестве аргументов две константы типа const void * и возвращающую тип int. Функция qsort вызывает эту функцию сравнения и использует возвращенное ею значение для установления взаимоотношений между двумя объектами в массиве, который подлежит сортировке. Так вот, что случится, если вы напишете функцию сравнения, подобную этой?
Слов нет, верно? У функции qsort нет способа получить информацию, в которой она нуждается. Вы не можете специфицировать прототип функций сравнения — вам потребуется отбросить правила обращения к функции qsort, если вы хотите заставить эту функцию делать то, чего от нее ожидаете.
Хорошо, вернемся к функции main (). Здесь точно такая же ситуация. Вы не ответственны за определение интерфейса main(). Для этого есть вызывающая функция. Кто вызывает main()? Это не вы (хотя фактически вы можете, если захотите, вызвать main(), точно так же как вы можете при желании вызвать свою функцию сравнения из qsort). Но первичным «заказчиком» функции main() является код запуска. Как же код запуска определит, успешно ли завершилась программа, если вы не сообщите ему об этом? Этот вызов «сидит» где-то глубоко во внутренностях системы (здесь я немного упростил его):
Если вы «опустошите» функцию main (), появится несколько интересных возможностей:
- Программа может работать в точности так, как вы ожидаете.
- returnstatus может попасть в ловушку и вызвать аварийный отказ программы (либо всего компьютера).
- Код запуска может отправить поддельный код возврата операционной системе, которая затем решит перемотать назад транзакции базы данных, поскольку программа не возвратила ожидаемого значения.
- А это хуже всего — код запуска может снаружи достигнуть вашего носа и начать извлекать из него демонов. (Демон (Demon) — процедура, запускаемая автоматически при выполнении некоторых условий и характеризуемая непредсказуемостью поведения. — Прим. науч. ред.).
Функция main () возвращает тип int. Существует только три переносимых на другие платформы значения, которые вы можете вернуть из main ():
Два последние определены в , и их фактические значения варьируются в зависимости от конкретной системы. (Другими словами, не следует отыскивать эти значения в библиотеке и переносить их в свою программу.)
Если вы вернули 0, код запуска сообщит операционной системе или другой хост-среде, что ваша программа выполнилась успешно, переведя 0 при необходимости в некоторое другое значение.
Количество аргументов функции main ()
Фактически функцию можно определить путем определения реализации. Следовательно, такое определение main, как
не обязательно запрещено, но вы должны знать, что компилятор обязан поддерживать любое из этих двух определений. Они разрешены только для компиляторов, которые документируют эти альтернативные формы и которые конечно же не включают всех компиляторов.
Ниже приведены переносимые определения функции main ():
- int main (void)
- int main (int argc, char **argv)
- int main (int argc, char **argv [ ] )
- Любое определение, в точности эквивалентное любому из трех предыдущих
Таким образом, вы можете использовать различные имена переменных в качестве argc и argv, а также можете использовать FOO, если определению предшествует typedef int FOO, и т.д. Но чтобы возвращаемое значение было переносимым, из main вы должны возвращать тип int, а также задавать либо ни одного аргумента, либо два специфицированных стандартом аргумента. Если есть необходимость получить доступ к среде переносимым способом, можете, конечно, использовать функцию getenv ().
© Ричард Хэзфилд, «Искусство программирования на C», 2001 год.
Добавлено: 23.07.2011 | —>Просмотров : 9348 | —>Рейтинг : 5.0 / 1 |
—>Теги : Void, Main, C++
Источник