Что обозначает int main
Разница между int main() и int main (void)?
Что означает следующее:
Я думаю, что int main() <. >означает, что main не получает никаких параметров (из командной строки):
Но что означает int main(void) <. >? что означает void?
Я посмотрел здесь, но это как-то другой вопрос.
ОТВЕТЫ
Ответ 1
В C разница сомнительна. Некоторым нравится утверждать, что последняя версия (без void ) технически является просто общим расширением реализации и не гарантируется работой по стандарту из-за формулировки в стандарте. Однако в стандарте четко указано, что в определении функции пустой набор параметров имеет четко определенное поведение: функция не принимает никаких параметров. Таким образом, такое определение для основного соответствует следующему описанию в стандарте:
Он [основной] должен быть определен с типом возврата int и без параметров.
Однако существует заметная разница между ними: а именно, версия без void не может обеспечить правильный прототип функции:
О, и просто чтобы быть полным: void имеет во всех деклараторах функций следующее значение:
(6.7.6.3p10) Частный случай неименованного параметра типа void как единственного элемента в списке указывает, что функция не имеет параметров.
Ответ 2
Ответ 3
Ответ 4
В С++ нет разницы, оба одинаковы.
Ответ 5
Прежде всего, существует разница в том, что разрешено для размещенных систем и автономных систем, как показанных здесь.
Для размещенных систем, 5.1.2.2.1 применяется запуск программы:
Функция, вызванная при запуске программы, называется main. Реализация не объявляет прототип для этой функции. Он определяется с типом возврата int и без Параметры:
. (больше текста следует в отношении стилей argv/argc и т.д.).
10 Частный случай неименованного параметра типа void как единственного элемента в списке указывает, что функция не имеет параметров.
Использование деклараторов функций с пустыми скобками (не деклараторы типов параметров прототипа) является устаревшей функцией.
И вот в чем разница. Являясь объявлением функции, int main() является плохой стиль из-за вышеизложенного, так как он не гарантированно работает в следующей версии стандарта C. Он помечен как устаревшая функция в C11.
В С++ обе формы полностью эквивалентны, но там int main() является предпочтительным стилем для субъективных, косметических соображений (Bjarne Stroustrup говорит так. что, вероятно, довольно плохое объяснение, почему вы делаете что-то определенным образом).
Ответ 6
Ответ 7
Ответ 8
Я знаю, что поток старый, но несколько лет назад этот вопрос беспокоил меня, поэтому я хотел бросить свою половину процента (если это).
Я всегда рассматриваю функции C, как если бы они фиксировали количество аргументов независимо от контекста, если только они не используют va_args. То есть, я верю, что ВСЕГДА имеют прототип:
даже если аргументы не переданы, функция имеет эти аргументы в стеке, потому что основная функция не имеет перегрузки функций.
C имеет возможность иметь примитивную перегрузку, просто делая вид, что аргумент отсутствует. В этом случае аргумент все еще передается и находится в стеке, но вы никогда не обращаетесь к нему, поэтому он просто уменьшает размер исходного кода.
Высказывание int main() просто означает, что я знаю, что функция может иметь параметры, но я их не использую, поэтому я пишу int main().
Высказывание int main (void) говорит о том, что main НЕКОТОРНО не имеет аргументов и подразумевает наличие двух разных прототипов функций:
Так как C не имеет функции перегрузки, это несколько вводит меня в заблуждение, и я не доверяю коду с основным (void) в нем. Я бы не стал, если main NEVER принял какие-либо параметры, и в этом случае main (void) будет полностью в порядке.
ПРИМЕЧАНИЕ. В некоторых реализациях есть больше параметров в основном, чем argc и argv, таких как env, но это меня не беспокоит, потому что я знаю, что я не говорю прямо, что это только два параметра, но это минимальные параметры, и все в порядке, чтобы иметь больше, но не меньше. Это противоречит прямому утверждению int main (void), который кричит на меня, поскольку ЭТОТ ФУНКЦИЯ НЕТ ПАРАМЕТРОВ, что неверно, поскольку это так, они просто опускаются.
Вот мой базовый код:
./sample У меня явно есть аргументы
У функции явно есть аргументы, переданные ей, несмотря на то, что она явно не говорит о том, что она не набирает void в прототип функции.
(6.7.6.3p10) Частный случай неименованного параметра типа void как только элемент в списке указывает, что функция не имеет параметров.
Таким образом, говоря, что функция имеет пустоту как аргумент, но фактически наличие аргументов в стеке является противоречием.
Моя точка зрения заключается в том, что аргументы все еще существуют, поэтому явное утверждение о том, что main не содержит аргументов, является нечестным. Честным способом было бы сказать int main(), который не утверждает ничего о том, сколько параметров у него есть, только о том, сколько параметров вам нужно.
ПРИМЕЧАНИЕ2: _argc, _pargv зависят от системы, чтобы найти ваши значения, которые вы должны найти, запустив эту программу:
Эти значения должны оставаться правильными для вашей конкретной системы.
Русские Блоги
Глава 2 Обзор языка C
Глава 2 Обзор языка C
Одна типичная программа на C
(1) Структура программы C
#include Директива препроцессора
function a (); // Строительный блок программы C в функции / * Каждый оператор должен заканчиваться на;
(2) Заявление
Операторы состоят из ключевых слов, идентификаторов, операторов и данных; операторы делятся на следующие категории:
(3) Общие концепции
4. Именование (Идентификатор)
Метод определения идентификатора: Camel case AntMan и подчеркнутый линейный hello_kitty
Требования: прописные и строчные буквы, цифры и символы подчеркивания (первый символ должен быть буквой или подчеркиванием)
Обычно используйте нижний регистр для переменных, все прописные для констант и старайтесь избегать идентификаторов, начинающихся с подчеркивания.
Причины объявления переменных
2. Простая структура программы.
Программа должна состоять из одной или нескольких функций, и должна быть основная функция.
Три, функция
Функция состоит из заголовка функции и тела функции
Программа, состоящая из функций:
Программа, состоящая из двух функций:
Четыре, программа отладки
1. Синтаксическая ошибка
2. Семантические ошибки
Неправильное значение.Если синтаксис C неверен, то это семантическая ошибка. Компилятор не может обнаружить такие ошибки.
, например:
3. Статус программы
1. Посредством пошагового отслеживания шагов выполнения программы и записи каждой переменной можно отслеживать состояние программы. Состояние программы фактически находится в процессе выполнения программы, все переменные в данной точке достойны сбора.
2. Или вставьте дополнительные операторы printf () в ключевые точки, чтобы увидеть изменения значения указанной переменной.
3. Используйте отладчик, отладчик. Запустите программу пошагово и проверьте значение переменной программы.
5. Навыки для улучшения читабельности программы.
1. Выберите значимые имена функций.
2. Напишите комментарии
3. Используйте пробелы, чтобы разделить концептуально разные части.
4. Каждая инструкция занимает одну строку.
Шесть, ключевые слова
Ключевые слова нельзя использовать в качестве идентификаторов
32 общих ключевых слова
auto: объявление автоматических переменных
short: объявление коротких целочисленных переменных или функций
int: объявление целочисленных переменных или функций.
long: объявление длинных целочисленных переменных или функций.
float: объявление переменных или функций с плавающей запятой
double: объявление переменных или функций с двойной точностью
char: объявление символьных переменных или функций
struct: объявить структурную переменную или функцию
union: объявить общий тип данных
enum: объявить тип перечисления
typedef: используется для псевдонима типа данных
const: объявление переменных только для чтения
unsigned: объявить беззнаковую переменную или функцию
signed: объявить переменную или функцию со знаком
extern: объявление переменных объявляется в других файлах
register: объявить регистровые переменные
static: объявление статических переменных
volatile: это означает, что переменная может быть изменена неявно во время выполнения программы.
void: объявить, что функция не имеет возвращаемого значения или параметров, и объявить указатель на тип
if: условный оператор
else: отрицательная ветвь условного оператора (используется с if)
switch: используется для оператора switch case: ветвление оператора switch
for: оператор цикла
do: тело цикла оператора цикла
while: условие цикла оператора цикла
goto: оператор безусловного перехода
continue: завершить текущий цикл и начать следующий цикл.
break: выход из текущего цикла.
по умолчанию: «другая» ветвь в инструкции switch
sizeof: вычислить длину типа данных.
return: подпрограмма return выражение (с параметрами или без) условие цикла
Семь, резюме
Восемь, обзорные вопросы
5. Если предположить, что следующие 4 примера являются частью полной программы, какие результаты они выдают?
6. Каковы ключевые слова языка C в main, int, function, char, =?
7. Как вывести значения слов и строк переменных в следующем формате (здесь 3020 и 350 представляют значения двух переменных)?
There were 3020 words and 350 lines.
Простите, а какой статус у программы после выполнения 7-й, 8-й и 9-й строк?
Простите, а какой статус у программы после выполнения 7-й, 8-й и 9-й строк?
Девять, упражнения по программированию
#include
int two();
int one_three();
int main(void)
<
printf(“Starting now:\n”);
one_three();
getch();
return 0;
>
//int two(void);
int one_three(void)
<
printf(“one\n”);
two();
printf(“three\n”);
return 0;
>
Что обозначает int main
Прототипы функций
В языке C++ все функции должны иметь прототипы, а в языке C прототипы формально необязательны, но весьма желательны. Общая форма определения прототипа имеет следующий вид. Например.
Возврат значений (оператор return )
Перегрузка функций
В языке C++ функции могут перегружаться. Когда говорят, что функция перегружена, это означает, что две или более функций имеют одинаковые имена, однако все версии перегруженных функций имеют различное количество или тип параметров. Рассмотрим пример следующие три перегруженные функции.
В каждом случае для определения того, какая версия функции func() будет вызвана, анализируется тип и количество аргументов.
Передача аргументов функции по умолчанию
В языке C++ параметру функции можно присвоить значение по умолчанию, которое автоматически будет использовано в том случае, если при вызове функции соответствующий аргумент не будет задан. Например.
Области видимости и время жизни переменных.
В языках C и C++ определенны правила видимости, которые устанавливают такие понятия как область видимости и время жизни объектов. Различают глобальную область видимости и локальную.
Глобальная область видимости существует вне всех других областей. Имя объявленное в глобальной области, известно всей программе. Например глобальная переменная доступна для использования всеми функциями программы. Глобальные переменные существуют на протяжении всего жизненного цикла программы.
Рекурсия
В языках C и C++ функции могут вызывать сами себя. Этот процесс называют рекурсией, а функцию, которая сама себя вызывает — рекурсивной. В качестве примера приведём функцию fact(), вычисляющую факториал целого числа.
Функция main()
Передача указателей
Несмотря на то что в языках C и С++ по умолчанию используется передача параметров по значению, можно вручную построить вызов ф. с передачей параметров по ссылке. Для этого нужно аргументу передать указатель. Поскольку в таком случае функции передаётся адрес аргумента, оказывается возможным изменять значение аргумента вне функции. Например.
В языке C++ адрес переменной можно передать функции автоматически. Это реализуется с помощью параметра-ссылки. При использовании параметра-ссылки функции передаётся адрес аргумента, и функция работает с аргументом, а не с копией. Чтобы создать параметр-ссылку необходимо перед его именем поставить символ «амперсанда» (&). Внутри ф. этот параметр можно использовать обычным образом, не прибегая к оператору «звёздочка» (*), например.
Спецификаторы функций
Спецификатор inline представляет собой обращённое к компилятору требование: вместо создания вызова функции раскрыть её код прямо в строке. Если компилятор не может вставить функцию в строку он имеет право проигнорировать это требование. Спецификатором inline могут определяться как функции-члены, так и не функции-члены.
В качестве виртуальной функции (с помощью спецификатора virual ) ф. определяется в базовом классе и переопределяется в производным классом. На примере виртуальных функций можно понять, как язык C++ поддерживает полиморфизм.
Шаблоны функций
Указатели на функцию
Следующий пример демонстрирует создание указателя и и два способа вызова функции через указатель, а также передачу функции как параметра другим функциям.
Создавать массивы указателей на функции так же можно.
В разделе «Функция main()», во втором блоке кода, должно быть: #include using namespace std; int main (int argc, char argv[])
Разница между int main () и int main (void)?
что означает следующее:
думаю, что int main() <. >означает, что main не получает никаких параметров (из командной строки), однако:
8 ответов:
В C, разница сомнительна. Некоторые любят утверждать, что последняя версия (без void ) технически является просто общим расширением реализации и не гарантирует работу по стандарту из-за формулировки в стандарте. Однако в стандарте четко указано, что в определении функции пустой набор параметров, имеет четко определенные поведение: что функция не принимает никаких параметров. Таким образом такая определение для main соответствует следующему описанию в стандарте:
Он [main] должен быть определен с возвращаемым типом int и без параметров.
существует, однако, заметная разница между ними: а именно, версия без void не удается предоставить правильный прототип для функции:
О, и просто, чтобы быть полным: void имеет следующее значение во всех деклараторах функций:
(6.7.6.3p10) частный случай неназванного параметра типа void в качестве единственного элемента в списке указывает, что функция не имеет параметров.
В C++ нет никакой разницы, оба одинаково.
прежде всего, есть разница в том, что разрешено для размещенных систем и автономных систем, как показано здесь.
для размещенных систем, 5.1.2.2.1 запуск программы применяется:
функция, вызываемая при запуске программы, называется главным. Реализация объявляет нет прототип для этой функции. Он должен быть определен с типом возврата int и без параметры:
. (далее следует текст что касается стилей argv / argc и т. д.).
интересная часть «без параметров». int main() и int main (void) в настоящее время эквивалентны, так как они оба являются деклараторами функций и не имеют параметров. Применяется следующее (6.7.6.3):
10 частный случай неназванного параметра типа void в качестве единственного элемента в списке указывает, что функция не имеет параметров.
14 список идентификаторов объявляет только идентификаторы параметров функции. пустой список в деклараторе функций, который является частью определения этой функции, указывает, что функция не имеет параметров. пустой список в деклараторе функций, который не является частью определение этой функции указывает, что нет информации о количестве или типах параметров входит в комплект поставки.145)
использование деклараторов функций с пустыми скобками (не деклараторы типа параметров прототип-формат) является устаревшей функцией.
и вот в чем разница. Будучи декларатором функций, int main() и плохой стиль из-за вышеизложенного, так как он не гарантированно работает в следующей версии стандарт C. Он помечается как устаревшая функция в C11.
в C++ обе формы полностью эквивалентны, но есть int main() является предпочтительным стилем по субъективным, косметическим причинам (так говорит Бьярне Страуструп. что, вероятно, является довольно плохим обоснованием для объяснения того, почему вы делаете что-то определенным образом).
Я знаю, что нить старая, но этот вопрос беспокоил меня некоторое время несколько лет назад, поэтому я хотел бросить свои полцента(если это так).
Я всегда рассматриваю функции C, как если бы они имели фиксированное количество аргументов независимо от контекста, если они не используют va_args. То есть, я доверяю main, чтобы всегда иметь прототип:
даже если аргументы не передаются, функция имеет эти аргументы в стеке, потому что основная функция не имеет функции перегрузка.
C имеет возможность иметь примитивную перегрузку, просто притворяясь, что аргумента нет. В этом случае аргумент все еще передается и находится в стеке, но вы никогда не обращаетесь к нему, поэтому он просто уменьшает размер исходного кода.
говоря int main () просто означает, что я знаю, что функция может иметь параметры, но я не использую их, поэтому я пишу int main ().
говоря int main (void) говорит, что main, конечно, не имеет аргументов, и подразумевает, что существуют два разных прототипа функций:
поскольку C не имеет перегрузки функций, это несколько вводит меня в заблуждение, и я не доверяю коду, который имеет main(void) в нем. Я бы не стал, если main никогда не принимал никаких параметров, и в этом случае main(void) будет полностью в порядке.
примечание: в некоторых реализациях есть больше параметров в main, чем argc и argv, таких как env, но это меня не беспокоит, потому что я знаю, что я явно не говорю, что это только два параметра, но это минимальные параметры, и это нормально иметь больше, но не меньше. Это в отличие от прямого высказывания int main (void), которое кричит на меня, поскольку эта функция не имеет параметров, что неверно, поскольку это так, они просто опущены.
вот мой базовый код:
./ пример у меня явно есть аргументы
функция явно имеет аргументы, переданные ей, несмотря на то, чтобы явно сказать, что это не происходит путем ввода void в прототип функции.
(6.7.6.3p10) частный случай неназванного параметра типа void в качестве единственный пункт в списке указывает, что функция не имеет параметров.
таким образом, говоря, что функция имеет void в качестве аргумента, но на самом деле имея аргументы в стеке является противоречием.
моя точка зрения заключается в том, что аргументы все еще существуют, поэтому явно утверждая то, что главное лишено аргументов-это нечестно. Честным способом было бы сказать int main(), который ничего не утверждает о том, сколько параметров у него есть, только о том, сколько параметров вы заботитесь.
NOTE2: _argc, _pargv зависят от системы, чтобы найти свои значения, вы должны найти их, запустив эту программу:
эти значения должны оставаться правильными для вашей конкретной системы.
Разница между int main () и int main (void)?
что означает следующее:
думаю, что int main() <. >означает, что main не получает никаких параметров (из командной строки), однако:
8 ответов
В C++ нет никакой разницы.
В C, разница сомнительна. Некоторые любят утверждать, что последняя версия (та, что без void ) является технически просто общим расширением реализации и не гарантируется работа по стандарту из-за формулировки в стандарте. Однако в стандарте четко указано, что в определении функции пустой набор параметров имеет четко определенное поведение: функция не принимает никаких параметров. Таким образом, определение для main соответствует следующему описанию в стандарте:
Он [main] должен быть определен с возвращаемым типом int и без параметров.
существует, однако, заметная разница между ними: а именно, версия без void не удается предоставить правильный прототип для функции:
О, и просто для полноты: void имеет следующее значение во всех деклараторах функций:
(6.7.6.3p10) частный случай неназванного параметра типа void в качестве единственного элемента в списке указывает, что функция не имеет параметров.
В C++ нет никакой разницы, оба одинаково.
прежде всего, есть разница в том, что разрешено для размещенных систем и автономных систем, как показано здесь.
для размещенных систем, 5.1.2.2.1 запуск программы применяется:
функция, вызываемая при запуске программы, называется главным. Реализация объявляет нет прототип для этой функции. Он должен быть определен с типом возврата int и без параметры:
. (далее следует текст относительно стилей argv / argc etc).
интересная часть- «без параметров». int main() и int main (void) в настоящее время эквивалентны, поскольку они оба являются деклараторами функций и не имеют параметров. Применяется следующее (6.7.6.3):
10 частный случай неназванного параметра типа void в качестве единственного элемента в списке указывает, что функция не имеет параметров.
14 список идентификаторов объявляет только идентификаторы параметров функции. пустой список в деклараторе функций, который является частью определения этой функции, указывает, что функция не имеет параметров. пустой список в деклараторе функций, который не является частью определение этой функции указывает, что нет информации о количестве или типах параметры поставлены.145)
использование деклараторов функций с пустыми скобками (а не деклараторов типов параметров прототипа) является устаревшей функцией.
и вот в чем разница. Будучи декларатором функций, int main() is плохой стиль из-за вышеизложенного, так как не гарантируется работа в следующей версии стандарт C. Он помечен как устаревшая функция в C11.
в C++ обе формы полностью эквивалентны, но есть int main() является предпочтительным стилем по субъективным, косметическим причинам (так говорит Бьярне Страуструп. что, вероятно, является довольно плохим обоснованием для объяснения, почему вы делаете что-то определенным образом).
Я знаю, что нить старая, но этот вопрос беспокоил меня некоторое время несколько лет назад, поэтому я хотел бросить свои полцента(если это).
Я всегда рассматриваю функции C, как если бы они имели фиксированное количество аргументов независимо от контекста, если они не используют va_args. То есть я доверяю main всегда иметь прототип:
даже если аргументы не передаются, функция имеет эти аргументы в стеке, потому что основная функция не имеет функции перегрузка.
C имеет возможность иметь примитивную перегрузку, просто делая вид, что аргумента нет. В этом случае аргумент все еще передается и находится в стеке, но вы никогда не обращаетесь к нему, поэтому он просто уменьшает размер исходного кода.
говоря int main () просто означает, что я знаю, что функция может иметь параметры, но я не использую их, поэтому я пишу int main ().
говоря int main (void) говорит, что main, безусловно, не имеет аргументов, и подразумевает, что существуют два разных прототипа функций:
поскольку C не имеет перегрузки функций, это несколько вводит меня в заблуждение, и я не доверяю коду, который имеет main(void) в нем. Я бы не стал, если main никогда не принимал никаких параметров, и в этом случае main(void) будет полностью в порядке.
примечание: в некоторых реализациях в main больше параметров, чем argc и argv, таких как env, но это меня не беспокоит, потому что я знаю, что я явно не говорю, что это только два параметра, но это минимальные параметры, и это нормально иметь больше, но не меньше. Это в отличие от прямого высказывания int main (void), которое кричит на меня, поскольку эта функция не имеет параметров, что неверно, поскольку это так, они просто опущены.
вот мой базовый код:
./ образец у меня явно есть аргументы
функция явно имеет аргументы, переданные ей, несмотря на то, что она явно говорит, что это не происходит путем ввода void в прототип функции.
как eq-говорит выше:
(6.7.6.3p10) частный случай неназванного параметра типа void как единственный пункт в списке указывает, что функция не имеет параметров.
таким образом, говоря, что функция имеет void в качестве аргумента, но фактически имеет аргументы в стеке, является противоречием.
моя точка зрения заключается в том, что аргументы все еще существуют, поэтому явно утверждая то, что main не имеет аргументов, нечестно. Честным способом было бы сказать int main(), который ничего не утверждает о том, сколько параметров он имеет, только о том, сколько параметров вы заботитесь.
NOTE2: _argc, _pargv зависят от системы, чтобы найти ваши значения, вы должны найти их, запустив эту программу:
эти значения должны оставаться правильными для вашей конкретной системы.