Форум программистов, компьютерный форум CyberForum.ru

int main() или int main(void)? - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 299, средняя оценка - 4.76
Krist_ALL
 Аватар для Krist_ALL
9 / 9 / 0
Регистрация: 01.02.2010
Сообщений: 317
04.04.2010, 14:32     int main() или int main(void)? #1
Показать, что функция не принимает никаких аргументов можно с помощью void. В языке С++ (не в С) принятно, что пустые скобки равнозначны void. (В языке С пустые скобки означают что вы ничего не собщаете о наличии аргументов )
чем отличается :
не сообщаю о наличии аргументов
функция не принимает никаких аргументов.......
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.04.2010, 14:32     int main() или int main(void)?
Посмотрите здесь:

int main() VS void main() C++
int main() и int _tmain(int argc, _TCHAR* argv[]) C++
В чем разница между int main(){} и int main(void){}? C++
C++ От void main() к int main()
C++ Подскажите пожалуйста с int main(int argc, char*argv[])
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
niXman
Эксперт C++
 Аватар для niXman
3133 / 1445 / 49
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
04.04.2010, 14:33     int main() или int main(void)? #2
ничем
Evg
Эксперт С++Автор FAQ
 Аватар для Evg
16825 / 5246 / 321
Регистрация: 30.03.2009
Сообщений: 14,127
Записей в блоге: 26
04.04.2010, 20:22     int main() или int main(void)? #3
Независимо ни от чего в функцию main параметрами передаётся то, что положено передаваться: argc, argv и на некоторых системах envp. Что ты опишешь в качестве параметров - мягко говоря пофигу. Ты можешь туда структуру записать - компилятору всё равно
Farkhadus
Сообщений: n/a
19.08.2011, 18:41     int main() или int main(void)? #4
в чем тогда разница

C++
1
2
3
4
5
6
7
8
9
10
int main ()
{  
    double litters, gallons;
    cout<< "eta proga pokazivaet koli4estvo litrov" << endl;
    cin >> gallons; // vvodim galoni
    litters = gallons * 3.78;
    cout << "litrov " << litters << endl;
    cin.get();
    cin.get();
}

И
C++
1
void main ()
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
19.08.2011, 18:51     int main() или int main(void)? #5
Farkhadus, в стандарте описано всего две перегруженных функции main:
C++
1
2
int main();
int main(int argc, char *argv[]);
Как видно, обе имеют тип возвращаемого значения int.
Некоторые компиляторы не пропускают код, в котором main имеет тип возвращаемого значения void. Те, которые пропускают - формально не соответствуют стандарту.

Только вот вопрос был о другом.

Добавлено через 3 минуты
Цитата Сообщение от niXman Посмотреть сообщение
ничем
Вообще-то, если говорить о С, а не о С++, то там была разница. Если прототип функции содержал просто пустые скобки, то компилятором никак не контролировалось, передаются ли в функцию параметры при вызове. Если же скобки в прототипе содержали void, попытка вызова функции с параметрами пресекалась на стадии компиляции.

Добавлено через 2 минуты
Ах ты чёрт, теперь и сам забыл, что речь идёт именно про main
germeticus
27 / 27 / 1
Регистрация: 21.06.2011
Сообщений: 82
19.08.2011, 19:07     int main() или int main(void)? #6
Цитата Сообщение от Farkhadus Посмотреть сообщение
в чем тогда разница

int main ()
И void main ()
Первая функция может возвращать какое-то целое число, например код ошибки. Вторая ничего не возвращает. Ряд компиляторов на вторую функцию ругнутся.
Net_Wanderer
235 / 208 / 19
Регистрация: 08.06.2011
Сообщений: 467
19.08.2011, 19:33     int main() или int main(void)? #7
Показать, что функция не принимает никаких аргументов можно с помощью void. В языке С++ (не в С) принятно, что пустые скобки равнозначны void. (В языке С пустые скобки означают что вы ничего не собщаете о наличии аргументов )
Потому что в самой первой версии языка C, не было проверки аргументов функций и даже если у таковой были параметры, её прототип имел просто пустые скобки, то есть если передать функции при вызове например два параметра вместо трех, то программа упадет только в рантайме. C компиляторы интерпретируют пустые скобки как обьявление в старом стиле и проверки аргументов не будет, а если есть void то это говорит компилятору о том что функция не принимает никаких параметров, и если например попытатся вызвать эту функцию с аргументом, это вызовет ошибку.

P.S Мне кажется в цитате, говорится не о main..
-=ЮрА=-
Заблокирован
Автор FAQ
19.08.2011, 21:23     int main() или int main(void)? #8
Цитата Сообщение от Krist_ALL Посмотреть сообщение
чем отличается :
не сообщаю о наличии аргументов
функция не принимает никаких аргументов.......
Цитата Сообщение от silent_1991 Посмотреть сообщение
то компилятором никак не контролировалось, передаются ли в функцию параметры при вызове.
- есть параметры которые передаются в функции косвенно.
Например объяви пару глобальных переменных и будем работать с ними в теле main() - они будут ничем не отличимы от явных параметров,
но для main параметры являются не передаваемыми, наоборот эти параметры содержат ключи командной строки которые были переданы программе
подробней тут смотри
int main() и int _tmain(int argc, _TCHAR* argv[])

Я создал специальный проект + добавил в него для тестирования ещё 3 параметра(как это сделал показал на скриншоте1,
причём с таким же успехом мы могли их передать программе через командную строку)

[Вот результат работы]

argv[0] : D:\Microsoft Visual Studio\CyberForum\TestParam\Debug\TestParam.exe
argv[1] : param2
argv[2] : param3
argv[3] : param4
Press any key to continue


PS:Как видишь если бы не исползовал функции по вылову параметров
argc = __p___argc();
argv = __p___argv();
то main() ничего бы не просигнализировал о параметрах переданных программе

Указанные функции объявлены в stdio.h, для их использования в консоле нужно ещё указать в настройках
использование библиотек MFC(см 2-й скриншот)
Миниатюры
int main() или int main(void)?   int main() или int main(void)?  
Вложения
Тип файла: rar TestParam.rar (6.5 Кб, 27 просмотров)
Olga_
 Аватар для Olga_
840 / 182 / 16
Регистрация: 01.08.2011
Сообщений: 502
19.08.2011, 21:42     int main() или int main(void)? #9
Цитата Сообщение от germeticus Посмотреть сообщение
Первая функция может возвращать какое-то целое число, например код ошибки. Вторая ничего не возвращает. Ряд компиляторов на вторую функцию ругнутся.
В обоих случаях функция main() возвращает целое число:
“Функция, вызывающая запуск программы, называется main. Реализация не объявляет прототип для этой функции. Он должен быть определен путем возврата целого типа int… Если возвращаемый тип не совместим с типом int, состояние завершения, возвращаемое в хост-среду, является не специфицированным”
Это означает, что во втором случае компилятор волен возвращать в хост-среду любое состояние,
поэтому запись вида
C++
1
void main()
это не очень умно.
odip
Эксперт C++
 Аватар для odip
7225 / 3287 / 58
Регистрация: 17.06.2009
Сообщений: 14,165
20.08.2011, 20:58     int main() или int main(void)? #10
Лучше писать
int main(int argc, char *argv[]);
И не пудрить мозг
germeticus
27 / 27 / 1
Регистрация: 21.06.2011
Сообщений: 82
20.08.2011, 21:27     int main() или int main(void)? #11
Цитата Сообщение от odip Посмотреть сообщение
Лучше писать
int main(int argc, char *argv[]);
И не пудрить мозг
А зачем? Мы что-то хотим передавать экзешнику? Если ничего не хотим, то вполне достаточно int main().
Евгеныч
0 / 0 / 0
Регистрация: 16.08.2011
Сообщений: 10
20.08.2011, 21:33     int main() или int main(void)? #12
пробовал на простых программах ставить void -результат 0))до сложных пока недозрел))
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
20.08.2011, 21:34     int main() или int main(void)? #13
Евгеныч, В С++ нет разницы. В С есть.
Евгеныч
0 / 0 / 0
Регистрация: 16.08.2011
Сообщений: 10
20.08.2011, 21:37     int main() или int main(void)? #14
ForEveR разница проявляеться в чем?))
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
20.08.2011, 21:38     int main() или int main(void)? #15
Евгеныч, В том, что в С функция

void foo();

может принимать любое кол-во параметров.

а функция void foo(void);

параметров не принимает.
Евгеныч
0 / 0 / 0
Регистрация: 16.08.2011
Сообщений: 10
20.08.2011, 21:44     int main() или int main(void)? #16
ForEveR пасиб учту)))
-=ЮрА=-
Заблокирован
Автор FAQ
21.08.2011, 16:19     int main() или int main(void)? #17
Цитата Сообщение от ForEveR Посмотреть сообщение
void foo();
может принимать любое кол-во параметров.
а функция void foo(void);
параметров не принимает
А если так, то не примет переменную в качестве косвенного параметра?

C++
1
2
3
4
5
int some_param = 5;
void foo(void)
{
     printf("%d",some_param);
}
asics
21.08.2011, 16:35
  #18

Не по теме:

Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
в качестве косвенного параметра?
Какой автор и в какой книге применяет такую терминилогию к глобалным переменным ?

grizlik78
Эксперт C++
 Аватар для grizlik78
1882 / 1414 / 101
Регистрация: 29.05.2011
Сообщений: 2,958
21.08.2011, 16:35     int main() или int main(void)? #19
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
А если так, то не примет переменную в качестве косвенного параметра?
Косвенным параметром названа глобальная переменная? "Примет" конечно же, только на параметры и их передачу это как-то не тянет.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.04.2016, 20:44     int main() или int main(void)?
Еще ссылки по теме:

Что и почему дописать в int main() чтобы функция void вернула значение C++
Какой новые синтаксис: int main() VS. void main() C++
C++ В каком случае надо начинать с int main() или с int _tmain( int argc, _TCHAR* argv[] ) и т.д.?

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
VityaNiko
2 / 2 / 2
Регистрация: 19.12.2012
Сообщений: 28
17.04.2016, 20:44     int main() или int main(void)? #20
Цитата Сообщение от silent_1991 Посмотреть сообщение
в стандарте описано всего две перегруженных функции main
Хэй, а почему забыли envp?
C++
1
int main(int argc, char *argv[], char *envp[]) {...}
Yandex
Объявления
17.04.2016, 20:44     int main() или int main(void)?
Ответ Создать тему
Опции темы

Текущее время: 13:29. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru