Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.07.2008, 11:54   #1
Swool
Пользователь
 
Регистрация: 12.07.2008
Сообщений: 39
По умолчанию в чем разница?

какая разница как писать?и так и так работает одинаково...

вариант 1:

Код:
#include <stdio.h>
#include <conio.h>
#include <iostream.h>


char client[]="flag";

main()
{
      printf("client");
      
      getch();
      return 0;
      }
Вариант 2:

Код:
#include <stdio.h>
#include <conio.h>
#include <iostream.h>


char client[]="flag";

int main(void)
{
      printf("client");
      
      getch();
      return 0;
      }

Последний раз редактировалось merax; 16.07.2008 в 12:27.
Swool вне форума Ответить с цитированием
Старый 16.07.2008, 12:05   #2
merax
Форумчанин
 
Регистрация: 27.12.2006
Сообщений: 955
По умолчанию

В первом случае явно указано, что тип возвращаемого значения будет целочисленным <int>. Во втором явно не указано, но по умолчанию предполагается, тип возвращаемого значения будет <int>.
merax вне форума Ответить с цитированием
Старый 16.07.2008, 12:07   #3
Старовъръ
Форумчанин
 
Аватар для Старовъръ
 
Регистрация: 25.06.2008
Сообщений: 100
По умолчанию

По стандарту нужно int писать.
Старовъръ вне форума Ответить с цитированием
Старый 16.07.2008, 12:26   #4
merax
Форумчанин
 
Регистрация: 27.12.2006
Сообщений: 955
По умолчанию

Ха стандарт не регламентирует, что тип возвращаемого значения должен быть каким-то конкретно. Может быть и void и bool и какой нужно вернуть, тот и возвращаю. А стандарты они разные бывают. Один компилятор так думает. Другой по другому. Компилятору C++ Builder вообщевот до фонаря. Все компилит без зазрения совести.
merax вне форума Ответить с цитированием
Старый 16.07.2008, 14:13   #5
Swool
Пользователь
 
Регистрация: 12.07.2008
Сообщений: 39
По умолчанию

т.е. я так понял это как Американский английский и английский Англии? если в сравнении=)
Swool вне форума Ответить с цитированием
Старый 16.07.2008, 14:17   #6
Старовъръ
Форумчанин
 
Аватар для Старовъръ
 
Регистрация: 25.06.2008
Сообщений: 100
По умолчанию

Цитата:
стандарт не регламентирует, что тип возвращаемого значения должен быть каким-то конкретно.
Программы после завершения возвращают какое-то значение. Если завершилась успешно - 0, если нет - код ошибки в целочисленном представлении. Или я неправ?
Старовъръ вне форума Ответить с цитированием
Старый 17.07.2008, 21:21   #7
filosof_x86
...
Форумчанин
 
Аватар для filosof_x86
 
Регистрация: 01.06.2008
Сообщений: 134
По умолчанию

Цитата:
Сообщение от merax Посмотреть сообщение
Ха стандарт не регламентирует, что тип возвращаемого значения должен быть каким-то конкретно. Может быть и void и bool и какой нужно вернуть, тот и возвращаю.
Вообще-то регламентирует. Вот один отрывок вопрос-ответа из FAQ от Страуструпа:

Цитата:
Can I write "void main()"?
Цитата:
The definition
void main() { /* ... */ }
is not and never has been C++, nor has it even been C. See the ISO C++ standard 3.6.1[2] or the ISO C standard 5.1.2.2.1. A conforming implementation accepts
int main() { /* ... */ }
and
int main(int argc, char* argv[]) { /* ... */ }
Здесь видим, что нас отсылают к стандарту ISO, к параграфу 3.6.1, второму пункту:

Цитата:
An implementation shall not predefine the main function. This function shall not be overloaded. It shall have a return type of type int, but otherwise its type is implementation-defined. All implementations shall allow both of the following definitions of main:
int main() { /* ... */ }
and
int main(int argc, char* argv[]) { /* ... */ }
Если попробовать написать вместо int что-то еще, то gcc гневно ругнется, сказав, что main должен возвращать int.

Цитата:
Сообщение от merax Посмотреть сообщение
А стандарты они разные бывают. Один компилятор так думает. Другой по другому.
Стандарт != то, что думает компилятор. Лидирующие компиляторы стараются соответствовать стандарту ISO, некоторые строго, не добавляя отсебячины, другие позволяют это себе. Но стандарт остается один.
filosof_x86 вне форума Ответить с цитированием
Старый 18.07.2008, 12:01   #8
merax
Форумчанин
 
Регистрация: 27.12.2006
Сообщений: 955
По умолчанию

А почему я собственно должен строго придерживатся стандарта? ISO конечно стандарт всеобъемлющий, но даже он не в состоянии предусмотреть всевозможные варианты.

Цитата:
Вот один отрывок вопрос-ответа из FAQ от Страуструпа:
Создателя конечно надо уважать, но вопрос - "Почему так, а никак иначе не раскрыт". Утверждать можно и обратное.

Цитата:
Но стандарт остается один.
Стандарт, то может и один, но ошибки в трактовании еще никто не отменял.
merax вне форума Ответить с цитированием
Старый 18.07.2008, 20:40   #9
filosof_x86
...
Форумчанин
 
Аватар для filosof_x86
 
Регистрация: 01.06.2008
Сообщений: 134
По умолчанию

Цитата:
Сообщение от merax Посмотреть сообщение
А почему я собственно должен строго придерживатся стандарта?
Да никто и не заставляет. Просто фраза «стандарт не регламентирует» не истина.

Цитата:
Сообщение от merax Посмотреть сообщение
Создателя конечно надо уважать, но вопрос - "Почему так, а никак иначе не раскрыт".
Ну так это же отрывок. Пояснение, почему было сделано так было в следующем абзаце. Приведу полный ответ:
Цитата:
The definition
void main() { /* ... */ }
is not and never has been C++, nor has it even been C. See the ISO C++ standard 3.6.1[2] or the ISO C standard 5.1.2.2.1. A conforming implementation accepts
int main() { /* ... */ }
and
int main(int argc, char* argv[]) { /* ... */ }
A conforming implementation may provide more versions of main(), but they must all have return type int. The int returned by main() is a way for a program to return a value to "the system" that invokes it. On systems that doesn't provide such a facility the return value is ignored, but that doesn't make "void main()" legal C++ or legal C. Even if your compiler accepts "void main()" avoid it, or risk being considered ignorant by C and C++ programmers.

In C++, main() need not contain an explicit return statement. In that case, the value returned is 0, meaning successful execution. For example:
#include<iostream>

int main()
{
std::cout << "This program returns the integer value 0\n";
}
Note also that neither ISO C++ nor C99 allows you to leave the type out of a declaration. That is, in contrast to C89 and ARM C++ ,"int" is not assumed where a type is missing in a declaration. Consequently:
#include<iostream>

main() { /* ... */ }
is an error because the return type of main() is missing.
filosof_x86 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Какая разница в css между id и class? Красавчег))) HTML и CSS 6 05.08.2008 14:44
Ну тогда скажите здесь в чём разница...? Arkuz Общие вопросы Delphi 4 23.04.2008 21:58
Какая разница между MS Visual и C++ Fanta_Clour Софт 2 09.03.2008 18:33
Разница между датами deenka БД в Delphi 3 31.01.2008 13:21
Какая разница,между ClientSockets и ServerSockets или [indy] T andrey4623 Компоненты Delphi 3 18.08.2007 03:29