LINUX.ORG.RU

В С++ нет процедур, есть функции, которые возвращают void.

anonymous
()

В C++ нет «функция» и «процедура».

В С++ есть функции, которые могут быть голыми или членами класса. Дополнительную магию делает static и virtual.

Если тип возвращаемого значения у функции void, то эта функция будет похожа на паскалевскую процедуру.

anonymous
()

Функция — это существование, мыслимое нами в действии

Процедура — порядок действий, направленных на достижение результата в плане оказания помощи людям у которых проблемы со здоровьем

Казалось бы, причём здесь С++?

rupert ★★★★★
()
Ответ на: комментарий от rupert

Хахаха ухахахаха. Ааааа! Хухухууу!! Емае. Хахахахахаха!

anonymous
()

На самом деле, безотносительно плюсов, насколько я помню, понятие «функция» траткуется в зависимости от семантики языка. В большинстве языков это синоним подпрогрммы. В ФП функция рассматривается как-бы в мат смысле, как отображение. Технически, отличие в том, что ф-ция обязана возвращать результат и не содержать сайд-эффектов. Нелокальные выходы, прерывания так же запрещены. Процедура обычно понимается в смысле подпрограммы. Хотя, вроде, в CS есть какая-то другая трактовка, вроде бы, но я не вникал.

newKingOfTheBlock
()

В чем отличие функции от процедуры в C++?

Отличие в том, что функции в С++ есть а процедур нет. Ну совсем нет. Не благодари.

mbivanyuk ★★★★★
()

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

umren ★★★★★
()

нет отличий, это разные названия одной сущности

privet
()
Ответ на: комментарий от Stahl

void* много где используется. а вот где ещё используется просто void, сходу не припомню. ну можно в параметрах ф-ции написать, но зачем?

next_time ★★★★★
()
Ответ на: комментарий от Stahl

static тоже не только область видимости определяет. это не означает, что static не является «специфическим словом» для статической области видимости.

next_time ★★★★★
()
Последнее исправление: next_time (всего исправлений: 1)
Ответ на: комментарий от next_time

вот где ещё используется просто void, сходу не припомню

template< class, class = std::void_t<> >
struct has_pre_increment_member : std::false_type { };

template< class T >
struct has_pre_increment_member<T,
           std::void_t<decltype( ++std::declval<T&>() )>
       > : std::true_type { };

Ну или просто:

(void) unused_parameter;
anonymous
()

В sicp говорят, что функция - мат. термин говорящий что делать, но не как это сделать. процедура - комп. термин, реализующий некоторую функцию. В С просто процедуру назвали словом «функция»

anonymous
()
Ответ на: комментарий от rupert

Процедура — порядок действий, направленных на достижение результата

На этом стоит остановиться. :-) Потому, как бывают, к примеру, процедуры вступления куда-либо. И т.п.

AS ★★★★★
()
Ответ на: комментарий от next_time

второй вариант не компилируется

~$ cat ./test.cpp
int main( int orly, char** orly2 ) {
    (void) orly;
    (void) orly2;
}
~$ g++ ./test.cpp
~$ 

А еще им можно затыкать предупреждения про неиспользуемый результат функции.

anonymous
()
Ответ на: комментарий от anonymous

Хотя конечно же в С++ неиспользуемые имена параметров можно пропускать или комментарить. Это больше сишный трюк.

anonymous
()
Ответ на: комментарий от anonymous

термин говорящий что делать, но не как это сделать

f(x)->x + x — это не говорит о том, как это сделать? Может быть, как сделать и что сделать — это одно и тоже, в данном контексте?

anonymous
()
Ответ на: комментарий от next_time

unused_parameter

так это не объявление переменной

English, motherfucker, do you speak it? (c)

anonymous
()

В C++ нет функций, есть только процедуры, возвращающие результат.

anonymous
()
Ответ на: комментарий от anonymous

это вырожденный случай. давай вычисли логарифм по мат. определению

anonymous
()
Ответ на: комментарий от next_time

но применения в плюсах ему нет

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

Ну и в макросах ещё встречается.

DarkEld3r ★★★★★
()

Ого! Возвращение жирнявого спидозника :)

anonymous
()
Ответ на: комментарий от next_time

второй вариант не компилируется

Да ладно, у вас какой-то особый компилятор?

void foo(int bar)
{
(void)bar;
}

andreyu ★★★★★
()
Ответ на: комментарий от anonymous

f(x)->x + x — это не говорит о том, как это сделать?

Нет, не говорит. Есть много разных способов числа складывать.

anonymous
()
Ответ на: комментарий от peregrine

g++, конечно :) но тут и gcc прокатит, линкер не запускается с флагом -S

Nietzsche
()
Ответ на: комментарий от reprimand

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

peregrine ★★★★★
()
Ответ на: комментарий от Stahl

Процедуры - лишние сущности, являющиеся подклассом функций, а поэтому они не нужны.

peregrine ★★★★★
()
Ответ на: комментарий от peregrine

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

какой вопрос такой ответ :)
я-то знаю что в с и с++ нет процедур в прямой их реализации. И меня это вполне устраивает.

reprimand ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.