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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 02.02.2012, 01:50   #1
Valentina2011
 
Регистрация: 13.12.2011
Сообщений: 9
Вопрос Функция

Не могу понять в чем ошибка в функции.
Компилятор пишет error C2144: syntax error : 'void' should be preceded by ';'
Код:
#include<iostream>
#include<conio.h>
using namespace std;
int sqr(int)
void main()
{int x=5;
cout<<x<<' '<<sqr(x)<<'\n';
}
int sqr(int x)
{x=x*x;
return x;
getche();
}

Последний раз редактировалось Stilet; 02.02.2012 в 11:09.
Valentina2011 вне форума Ответить с цитированием
Старый 02.02.2012, 02:28   #2
ERAGORN
Пользователь
 
Аватар для ERAGORN
 
Регистрация: 02.01.2012
Сообщений: 46
По умолчанию

В 4 строке забыли точку с запятой.
ERAGORN вне форума Ответить с цитированием
Старый 02.02.2012, 02:36   #3
Valentina2011
 
Регистрация: 13.12.2011
Сообщений: 9
По умолчанию

спасибо)))
Valentina2011 вне форума Ответить с цитированием
Старый 02.02.2012, 10:34   #4
Blade
Software Engineer
Участник клуба
 
Аватар для Blade
 
Регистрация: 07.04.2007
Сообщений: 1,618
По умолчанию

main() должна возвращать int
Мужество есть лишь у тех, кто ощутил сердцем страх, кто смотрит в пропасть, но смотрит с гордостью в глазах. (с) Ария
Blade вне форума Ответить с цитированием
Старый 02.02.2012, 15:16   #5
Valentina2011
 
Регистрация: 13.12.2011
Сообщений: 9
По умолчанию

Там ошибка в точке с запятой была. Уже все работает))
Код:
Код:
#include<iostream>
 #include<conio.h>
using namespace std;
 int sqr(int) ;
 void main()
 {int x=5;
 cout<<x<<' '<<sqr(x)<<'\n';
  getche();
 }
 int sqr(int x)
 {x=x*x;
 return x;
}

Последний раз редактировалось ACE Valery; 04.02.2012 в 22:12.
Valentina2011 вне форума Ответить с цитированием
Старый 02.02.2012, 15:31   #6
Blade
Software Engineer
Участник клуба
 
Аватар для Blade
 
Регистрация: 07.04.2007
Сообщений: 1,618
По умолчанию

Цитата:
Сообщение от Valentina2011 Посмотреть сообщение
Там ошибка в точке с запятой была.
А ошибка в возвращаемом типе main() осталась.
Если ваш компилятор это компилирует - это не значит, что ошибки нет
http://codepad.org/W9atg1IJ
Мужество есть лишь у тех, кто ощутил сердцем страх, кто смотрит в пропасть, но смотрит с гордостью в глазах. (с) Ария
Blade вне форума Ответить с цитированием
Старый 02.02.2012, 16:50   #7
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

Цитата:
Сообщение от Blade Посмотреть сообщение
А ошибка в возвращаемом типе main() осталась.
Если ваш компилятор это компилирует - это не значит, что ошибки нет
http://codepad.org/W9atg1IJ
Не_портируемое решение не является ошибочным, в случае, если "портируемость" не является одним из требований к решению.
_Bers вне форума Ответить с цитированием
Старый 02.02.2012, 17:50   #8
Blade
Software Engineer
Участник клуба
 
Аватар для Blade
 
Регистрация: 07.04.2007
Сообщений: 1,618
По умолчанию

Цитата:
Сообщение от _Bers Посмотреть сообщение
Не_портируемое решение не является ошибочным
А решение, не соответствующее стандарту - является
Мужество есть лишь у тех, кто ощутил сердцем страх, кто смотрит в пропасть, но смотрит с гордостью в глазах. (с) Ария
Blade вне форума Ответить с цитированием
Старый 02.02.2012, 17:58   #9
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

Цитата:
Сообщение от Blade Посмотреть сообщение
А решение, не соответствующее стандарту - является
Решение, не соответствующее стандарту, но соответствующее конкретному компилятору является "не_портируемым".
Не нужно путать "не_портируемое решение", и "решение, содержащие ошибку".

В частности, корпорация зла имеет свои особые основания для того, что бы отходить от стандарта в определённых моментах. Код генерируемый самой студией, или код заточенный под работу с компилятором студии "ошибочным" не является, при условии, что портируемость не является одним из требований к создаваемому продукту.
_Bers вне форума Ответить с цитированием
Старый 03.02.2012, 17:38   #10
Сыроежка
Форумчанин
 
Регистрация: 01.07.2011
Сообщений: 423
По умолчанию

Цитата:
Сообщение от _Bers Посмотреть сообщение
Решение, не соответствующее стандарту, но соответствующее конкретному компилятору является "не_портируемым".
Не нужно путать "не_портируемое решение", и "решение, содержащие ошибку".

В частности, корпорация зла имеет свои особые основания для того, что бы отходить от стандарта в определённых моментах. Код генерируемый самой студией, или код заточенный под работу с компилятором студии "ошибочным" не является, при условии, что портируемость не является одним из требований к создаваемому продукту.
Вы путаете разные вещи. Код, не соответствующий стандарту, является некорректным. В соответсвии со стандартом такое поведение называется undefined.
Но есть положения сттандарта, где стандарт явно указывает, что реализацию той или иной сущности он осталяет на усмотрение разработчиков компиляторов. В этом случае эта сущность называется unspecified. То тесть стандарт не уточняет, как может быть реализована эта сущность. В этому случае разработчики компиляторов обязаны документировать поведение данной конкретной сущности в описании компилятора.
Кроме того разработчики компиляторов могут включать собственные расширения к языку, которые должны быть также явно документированы. Вот, собственные расширения к языку, например, дополнительные функции, или дополнительные синтаксические конструкции - это и является тем, что вы называете портируемостью. При этом у компилятора должна быть опция, которая позволяет отключить эти расширения, или в случае использования функций в документации к компилятору должно быть указано, что эта функция не является стандартной.
Что касается void main, то это не непортируемость, а неопределенное поведение, так как среда, в которой запускается эта программа, не будет знать, как обрабатывать завершение этой программы. И более того, это не соответсвует тому, что компилятор в любом случае вставляет код, который возвращает из main целочисленное значение, даже если вы это сами не будете делать. То есть имеет место противоречие между объявлением фукнции и ее определением. Именно поэтому такое поведение является неопредленным, то есть undefined , а программа использующая такое неопредленное поведение является согласно терминологии стандарта ill-formed.
В стандарте много мест, где указано, что компиляторы моогут компилировать ваш код, тем не менее он является некорректным, так как помимо синтаксиса есть еще и семантика.
Со мной можно встретиться на www.clipper.borda.ru

Последний раз редактировалось Сыроежка; 03.02.2012 в 17:42.
Сыроежка вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
функция sanya94 Общие вопросы C/C++ 3 24.11.2010 16:32
функция if IRMA230 Microsoft Office Excel 12 02.06.2010 22:43
функция loloverg Помощь студентам 0 18.05.2010 20:12
Функция Lemo Помощь студентам 1 02.12.2008 00:24
одна функция потока, а другая функция - член класса запускающего этот поток Дмитрий_Ч Общие вопросы C/C++ 2 27.09.2007 08:50