C/C++

Возвращение функции return func(); (Си)

Что делает возвращение функции?
return 5; например возвращает число 5 в функцию. А что происходит при возвращении функции return func();?
Просто идёт выполнение указанной функции?
Функция при этом не содержит какое либо значение, которое можно передать? Типа этого int a = func();

int func2(){printf("%s\n", "World");}
int func(){return func2();}
int main()
{
func();
return 0;
}
Если написать void func2(), то почему то не работает, хотя func2() не возвращает значение.
Денис *****
Денис *****
288
Запись return func2(); эквивалентна записи:

int r = func2();
return r;

int func2() в твоем случае возвращает "мусор", переменной r присваивается черт знает что.

В случае void func2() функция вообще ничего не возвращает. Как ты присвоишь то, чего даже нет?

С каждым новым вопросом ты поражаешь меня все больше и больше...
АЮ
Александр Юрьевич
3 568
Лучший ответ
Денис ***** При выполнении данного кода выполняется func2();
Это является каким то нежелательным эффектом?

Какой мой последний вопрос вас удивил?
Буфер в безопасных версиях команд. strcpy_s, sprintf_s (Си)
Да, конечно при изучении обычно ведь перепрыгивают эти темы, один я такой отсталый.
Любая функция возвращает значение, объект либо void. Последней командой в функции, возвращающей void неявно определён пустой оператор return. Его можно указать явно. Например,

void hello(const char* name) {
printf("Hello, %s!\n", name);
return;
}

Такой синтаксис даёт возможность по условию прервать функцию, возвращающую void, не дожидаясь конца её выполнения, что значительнее полезнее, чем приведённый выше пример.
return func() - возвращает значение, которое вернула функция func.
В случае void func2() - возвращать нечего, потому что func2 ничего не возвращает.
Денис ***** При запуске данного кода, идёт выполнение функции func2().
Выводится на экран слово World. Значит что то происходит.
Вот и хотел бы узнать что делает данная конструкция.
Денис ***** И если бы функция ничего не возвращала бы, то было бы предупреждение компилятора. Но его нет.
Денис ***** По какой причине int func2() должна что то возвращать?
Думаю логично было бы написать void func2(), но выводится ошибка.

Мне кажется мы по кругу ходим.
Денис ***** Если пишу void func2(), появляется ошибка.
Почему func2() должна что то возвращать? Смысл?
Денис ***** Или когда пишу return func2(), то func2() тоже автоматически превращается в возвращаемый тип функции?
Странно тогда ещё то, что func2() можно приписать разные типы возвращаемого значения и не будет ошибок.
char func2(), float func2(), double func2(), int func2()
Алексей Божедомов Все будет работать так как поймет компиллатор.
Функция func возвращает значение int.
Если func2 вернет char, то компиллятор преобразует значение char в int.
И func вернет все равно int.

А вот void в int не преобразуешь.
Почитай внимательно про типы переменных и их размерность.
Похоже ты просто не понимаешь, что это такое.
Михаил Ершов int func2() { printf("%s\n", "World"); }
int func() { return func2(); }
Вроде бы все очевидно. func2() не может быть void, пока есть return func2(), потому что в этом случае предполагается, что func2() что-то возвращает.
int func2() { printf("%s\n", "World"); } тоже возвращает что-то, даже без return. Зависит от соглашения о вызовах, вероятно, там будет значение регистра eax/rax на момент выхода из функции, а это, возможно, будет значение, возвращенное последней не-void функцией. Но с учетом всяких RVO это все гадание на кофейной гуще.
Денис ***** От того что вы сказали что это очевидно, это очевыдным не стало.
Так на любое можно говорить- так это же очевидно. Нет, самая простая вещь может быть объяснена очень детально.
А здесь целый язык программирования. Я вас категорически не понимаю, тем более с такими аргументами: это очевидно.
Догадываться, предполагать я сам могу.
То что при return func2(); func2 становится возвращаемым типом функции вым очевидно только сейчас после того как авторы языка заложили в него такую логику. Это нифига не очевидно.
Денис ***** Никакой конкретики. Какой то белый шум.
Как будто библию читаю где нужно просто поверить.
ошибочный ваш случай
int func2() { printf("%s\n", "World"); // ошибка
int func() { return func2(); }
int main()
{
func(); // ничего потому как не выводим значение этой функции
return 0;
}

Как надо писать
int func2() { return printf("%s\n", "World"); }
int func() { return func2(); }
int main()
{
func(); // ничего небудет выведено
printf( "%d \n", func() ); // си вывод int КОЛИЧЕСТВО символов
// или с++ cout funct() ; // КОЛИЧЕСТВО символов

return 0;
}

читаем си printf - ttps://proginfo.ru/printf/
Денис ***** func(); // ничего небудет выведено
Выводит слово World
Денис ***** printf( "%d \n", func() ); // си вывод int КОЛИЧЕСТВО символов
А это выводит и слово и цифру
World
6
Денис ***** Так и что? Почему так происходит?
Это я и спрашивал в своём вопросе.
Денис ***** По логике получается в значение функции передаётся функция printf?
return printf("%s\n", "World");
Функция имеет тип int, а передаётся целая инструкция, это как? Что за тип у этой всей инструкции будет?
Костя Яблонский а) причем тут вывод на экран
printf - возвращает сам возвращает int данные уже return у в вашей функции
а уже return передает данные в выходную = возвращаемую переменгую

б ) ваша функция func возращает int результат return число
вы сами ее создали функцию с int возвратом - и она должна возвращать число
ps только функции с тип void ничего не возвращает - после обрабртки ЭТО касакеться ПЕРЕМЕННЫХ а не вывода на экран

в) Функция имеет тип int, а передаётся целая инструкция, это как?
ps целая инструкция printf не передается return у
передаеться только результат int которая возвращает функция printf

ЭТО
Денис ***** Похоже на разговор глухого со слепым.
Денис ***** Хотя это одним предложением объясняется.
Функция выполняется, выводит результат своих действий (World) и передаёт значение в другую функцию (Число 6).
Костя Яблонский вы себя слышыте сми или нет
вы писали про return - return 5; например возвращает число 5 в функцию. А что происходит при возвращении функции return func();?

вам надо учить си и с++ основы и ключевые слова лексемы и инструкции