Почему имя, основное для функционального основного ()

Это брало их достаточно долго для добавления поддержки этого,

Системный лоток

8
задан Nethra 25 June 2014 в 20:56
поделиться

18 ответов

Если вы разрабатываете встроенную систему, вы можете увидеть другие имена.

ECos использует

cyg_user_start().  

(или main (), в зависимости от настройки).

Модуль ядра Linux использует функцию, помеченную как __init (хотя это не одно и то же, поскольку модули обычно управляются событиями) .

0
ответ дан 5 December 2019 в 04:28
поделиться

Потому что он ничем не хуже других . Другой способ - использовать безымянный блок, как в Паскале и его производных, или в большинстве языков сценариев, где «основная функция» (если ей разрешено так ее называть) является только началом файла. Затем вам нужно позаботиться о том, откуда вы получаете аргументы программы (некоторая библиотека или глобальная переменная), и вы можете спросить, почему они выбрали args вместо arguments или argv или param и т. Д.

С уважением,

0
ответ дан 5 December 2019 в 04:28
поделиться

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

Но, однако, , Я хотел бы обратить ваше внимание на всех, кто говорит: «А что, кроме main () , все равно должно было стать?» что в действительности в именованной функции нет необходимости. Это вполне могло быть {} с условием, что код в этих анонимных скобках является основной функцией, и все. (Таким образом, это не только подразумевает int , когда тип возвращаемого значения отсутствует, но также подразумевает, так сказать, main () , когда имя функции отсутствует.)

1
ответ дан 5 December 2019 в 04:28
поделиться

Иногда лучше не менять что-то просто ради изменения.

1
ответ дан 5 December 2019 в 04:28
поделиться

Ну, либо у него должно быть фиксированное имя, либо вы должны дать программисту способ указать имя.

Если бы программист мог выбрать имя, тогда бы он должно быть дополнительным выражением или какой-либо особенностью языка, чтобы справиться с этим. И что от этого получится? Возможно, нам было бы хуже: тогда, когда вы захотите найти эту функцию, вам сначала нужно будет найти то, что говорит о том, что она вызывает, затем вам придется искать саму функцию, так что будет два шагов вместо единицы.

Учитывая, что у него будет фиксированное имя, кто-то должен был выбрать, каким будет это имя. Можно было придумать много кандидатов: «старт», «бег», да что угодно. Я сомневаюсь, что была какая-то основная причина, по которой был выбран «основной». Кто-то должен был что-то выбрать,

2
ответ дан 5 December 2019 в 04:28
поделиться

Надо как-нибудь это назвать. И я не могу придумать лучшего названия, так как именно здесь начинается основной поток программы.

Нет общей структуры, кроме, возможно, возможности принимать аргументы. Не должно быть и общей структуры, поскольку весь смысл программы - делать все, что хочет программист. То есть что угодно.

2
ответ дан 5 December 2019 в 04:28
поделиться

Разработчикам языка пришлось выбрать "какое-то" имя, и main () звучит как функция Main, так как именно там начинается выполнение :)

2
ответ дан 5 December 2019 в 04:28
поделиться

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

2
ответ дан 5 December 2019 в 04:28
поделиться

Более интересные вопросы были бы ...

Вы так близко подошли к некоторым вопросам, что были бы почти интересны ...

  • является основной частью язык или библиотека?
  • как моя программа запускается?
  • работает ли что-нибудь до main () ?
  • какой язык использовался первым main () ?
  • Могу ли я написать программу без библиотек? Нужен ли main () ?
  • что происходит, когда я возвращаюсь из main ()?
  • , чтобы произвести впечатление на девушек, как я могу изменить имя из main () к чему-то более крутому?
4
ответ дан 5 December 2019 в 04:28
поделиться

Поскольку это сделал C, C ++ сохранил его для совместимости, а Java сделала это, чтобы облегчить переход от C ++. Еще на заре Java работодатели часто нанимали людей, которые имели опыт работы с C ++, потому что он был очень похож. В отличие от сегодняшнего дня, когда они хотят, чтобы новичок имел больше опыта работы с Java, чем Гослинг.

И давайте не будем забывать, что PL / 1 использовала «основные параметры процедуры» для той же цели. (Чувак, это освежает некоторые ячейки памяти, к которым давно не прикасались!)

10
ответ дан 5 December 2019 в 04:28
поделиться

Обратите внимание, что хотя имя main является своего рода условным обозначением, вы можете называть свою функцию ввода как хотите, если вы указываете компоновщику , что точка входа на самом деле есть. См. Этот фрагмент из man ld :

       -e entry
       --entry=entry
       Use  entry  as  the explicit symbol for beginning execution of your
       program, rather than the default entry point.  If there is no  sym-
       bol  named  entry,  the linker will try to parse entry as a number,
       and use that as the entry address (the number will  be  interpreted
       in  base  10;  you may use a leading 0x for base 16, or a leading 0
       for base 8).

Кроме того, FWIW, ld первый выбор точки входа (иногда) является фактически вызываемой функцией _start (но я думаю, что это действительно зависящее от платформы значение).

И см. это сообщение , которое добавляет немного больше объяснений к ld ] -e параметр:

-e дает замену для _start , а не main () . Ты должен знать как среда выполнения системы передает аргументы программе и дублирует некоторые функции crt [01in] .o и crt {begin, end} .o для вызова main.


Я не могу найти, где это задокументировано на странице руководства gcc, но вы также можете передать -e в gcc, чтобы указать точку входа; однако это оказывается довольно сложной задачей, если вы обойдете магию C main .

$ cat junk.c
int junk()
{
        return 8;
}

$ gcc -nostdlib -e _junk junk.c -o junk && (./junk; echo $?)
8
26
ответ дан 5 December 2019 в 04:28
поделиться

Потому что это основная функция. Термин основная функция используется по крайней мере с 1960-х годов. В PL / I функция, которая начала выполнение, имела следующий заголовок:

 FOO: PROCEDURE OPTIONS(MAIN);

, где FOO - имя функции.

3
ответ дан 5 December 2019 в 04:28
поделиться

Здесь много глупых и не очень уважительных ответов на законный вопрос.

C пришел не из ниоткуда . Его непосредственный предок - B, написанный Кеном Томпсоном. Вот ссылка на руководство B . Базовая структура B-программы - это

main (); exit ();

main () предоставляется программистом, а exit () предоставляется библиотекой. Кажется, это первое появление main (), поскольку предшественник B, BCPL, не имеет такой концепции. Думаю, вам стоит спросить Кена Томпсона, почему это главное, а не что-то еще.

32
ответ дан 5 December 2019 в 04:28
поделиться

потому что C, C ++ и Java нуждались в способе узнать, где находится главная функция ...

однако многие другие языки позволяют называть ее так, как вам нравится, и есть способ сообщить компилятору, какая функция является точкой входа (параметр компилятора, прагма, специальный оператор ...).

-1
ответ дан 5 December 2019 в 04:28
поделиться

Быстрые ответы:

  1. Почему нет?
  2. Зачем это менять? К чему?
  3. Потому что это один из признаков того, что C, C ++ и Java имеют общее происхождение (в частности, C сильно повлиял на два других). Например, вы не увидите main () в Scheme или Prolog.

Лично я считаю, что ответы на вопросы 2a и 2b являются наиболее важными. Если вы действительно хотите сломать каждую программу на C / C ++ / Java в мире, чтобы исправить то, что, по вашему мнению, является несовершенной эстетикой одного имени функции, я должен спросить вас, правильно ли вы расставили приоритеты ....; -)

3
ответ дан 5 December 2019 в 04:28
поделиться

Это не всегда main ().

Апплеты Java используют init () и start () для подключения внешнего вызывающего абонента.

Сервлеты запускаются через init () и service () методы.

(служба будет отправлять более знакомые методы doGet и doPost)

Конечно, эти исключения полагаются на некоторый контейнер, отличный от ОС, для вызова методов.

6
ответ дан 5 December 2019 в 04:28
поделиться

Или, если быть более тупым, почему мы едем по обочине дороги?

Ответ: Мы должны были что-то выбрать.

8
ответ дан 5 December 2019 в 04:28
поделиться

Как бы вы назвали основную функцию программы?

9
ответ дан 5 December 2019 в 04:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: