ShreeshaVitthal Ответов: 6

Можем ли мы вернуть пользовательскую функцию в main()


когда мы возвращаем значение как 0 для main (), который должен убедиться, что данная программа выполняется правильно .Но можем ли мы вернуть пользовательскую функцию в main()

Что я уже пробовал:

#include< stdio.h>
int add(int, int);
тап_п()
{
-----
-----
возврат добавить();
}

int add(int a,int b)
{
------
------
}

Richard Deeming

Мое предположение было бы "да", но почему бы вам не попробовать и не посмотреть?

ShreeshaVitthal

я, спасибо, понял.

6 Ответов

Рейтинг:
2

Afzaal Ahmad Zeeshan

Цитата:
когда мы возвращаем значение как 0 для main (), который должен убедиться, что данная программа выполняется правильно .Но можем ли мы вернуть пользовательскую функцию в main()
Вы возвращаете не определенное пользователем значение, а значение из функции.
int add(int a,int b)

Эта функция возвращает int, который является встроенным типом В C++. И поэтому вы можете использовать эти функции в своих программах для возврата значений. Прочтите абзац после следующей цитаты Однако, если бы вы захотели сделать что-то подобное,
class userdefined {
  // members
};

userdefined main() {
   userdefined defined;

   // processing
   return defined;
}

Это не будет соответствовать стандартам C++, и вы будете заставлять программу работать так, как она этого не ожидает. Компилятор будет жаловаться на несколько вещей, таких как "main must return int". Это из-за технических характеристик.

Цитата:
когда мы возвращаем значение как 0 для main (), который должен убедиться, что данная программа выполняется правильно
Если быть точным, 0 исходит из стандартов, где в качестве фактического макроса для этого используется "EXIT_SUCCESSЭто должно сказать лежащему в основе фреймворку, что программа завершилась успешно, нормальное завершение Когда вы возвращаете другое значение из функции, базовый фреймворк или Служба могут не знать,что результат был задуман. Фреймворк будет считать это какой-то ошибкой или чем-то еще, что фреймворк или операционная система имеют в базе данных. Вот почему программы должны возвращать 0, если вы чувствуете себя недовольными этим, вы можете пропустить эту строку начиная с C 1999 года, потому что компилятор сам добавит return 0; в конце программы, направляя фреймворк считать это нормальным завершением.

Для получения дополнительной информации, пожалуйста, ознакомьтесь со следующими документами,

Основная функция - cppreference.com[^]
Структура программы-учебники по C++ [^]
c++ - должен ли я возвращать EXIT_SUCCESS или 0 из main ()? - переполнение стека[^]

Нет стандарта для основной функции:

Это неправильно, для этого существует стандарт, и компиляторы следуют ему. Для демо-версии, попробовать это[^]:
class defined { };

defined main()
{
  defined usrdfnd;
  
  return usrdfnd;
}

/* 
 7:14: error: '::main' must return 'int'
 In function 'int main()':
 11:10: error: cannot convert 'defined' to 'int' in return
 */

Вы можете прочитать сообщение об ошибке и посмотреть, что в нем написано. Однако вы всегда можете изменить процедуры компилятора и изменить то, как он следует стандартам.


Рейтинг:
2

Richard MacCutchan

Это даже не будет компилироваться, так как вы вызываете add без его необходимых параметров. И возвращать функцию (даже если бы это было возможно) из main не имеет смысла, так как оболочка не будет знать, что с ней делать.


Рейтинг:
2

Patrice T

Из вашего решения 5.
Вставь эту строчку main и вы увидите проблему.

printf("Sum is %d",add());


Вы должны научиться использовать отладчик как можно скорее. Вместо того чтобы гадать, что делает ваш код, пришло время увидеть, как он выполняется, и убедиться, что он делает то, что вы ожидаете.

Отладчик позволяет вам следить за выполнением строка за строкой, проверять переменные, и вы увидите, что есть точка, в которой он перестает делать то, что вы ожидаете.
Отладчик-Википедия, свободная энциклопедия[^]
Освоение отладки в Visual Studio 2010 - руководство для начинающих[^]


ShreeshaVitthal

Тогда в вопросе нет смысла

Patrice T

Я не понимаю, вы можете развиваться ?
Английский-не мой родной язык.

ShreeshaVitthal

Код, который вы дали, если я использую его, то я могу получить ответ, но задача состоит в том, чтобы получить ответ, вернув add() через main().

Patrice T

он предназначен только для отладки.
Если вы это сделаете ,то увидите, что add() не повторяет значение!

Рейтинг:
1

Patrice T

Да, вы можете это сделать, если в вашем коде нет других ошибок.

Общий принцип: все, что законно хранить в переменной данного типа, также законно как значение возврата функции того же типа.

// say you have a variable
int myvar;
// if it is legal to
myvar= 1+int(15/3)+4*5;
//it is also legal to
return 1+int(15/3)+4*5;
// if the function is define as
int myfunc()


Рейтинг:
0

Jochen Arndt

- Да, можешь.

Это зависит от вас, чтобы определить, какие значения возвращаются main функции и то, как они должны интерпретироваться (обычно в документации программы и, возможно, как часть вывода справки / использования с приложением командной строки). Нет стандарта, какие значения должны быть возвращены. Однако обычно при обычном завершении программы возвращается ноль.


Afzaal Ahmad Zeeshan

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

Jochen Arndt

Я не понимаю, к чему ты клонишь.

Он спросил, Может ли он вернуть значение, возвращаемое его функцией add (). Это совершенно справедливо до тех пор, пока он возвращает int, что имеет место в его примере. Даже другие типы допустимы здесь, когда они могут быть приведены к int без потери точности (например, signed и unsigned char и short).

Afzaal Ahmad Zeeshan

Да, значения могут быть возвращены и вызовы функций могут быть сделаны, но только до тех пор, пока они являются целыми. Вот тут-то я и соглашаюсь с тобой. Но та часть, что в нем нет стандарта, находится там, где его нет. Значения также должны соответствовать стандартам, в противном случае операционная система может регистрировать отчеты об ошибках (если код возврата указывает на это).

Jochen Arndt

Единственный стандарт заключается в том, что main() должна возвращать int.

Нет никакого стандарта в отношении самой ценности. Если вы думаете, что здесь есть что-то подходящее, пожалуйста, скажите мне.

Это только обычная практика-возвращать ноль при нормальном выходе. Одна из причин возврата нуля / ненулевого значения заключается в том, что они могут использоваться с цепочкой команд с использованием операторов && и||.

Рейтинг:
0

ShreeshaVitthal

спасибо вам ребята это то что я пробовал

#include<stdio.h>
int add()
{
	int a=10,b=10,c;
	printf("Fuction is invoked\n");
	c=a+b;
	printf("Sum is %d",c);
}

int main()
{
	int v=9;
	printf("testing one\n");
	if(v>9)
	printf("try againg\n");
	return add();
}

выход:--
тестирование одного
Функция вызывается


jeron1

Значит, "сумма..." не напечатана? или окно консоли закрывается так быстро, что вы его не видите?

Patrice T

Воспользуйся Улучшить вопрос чтобы обновить ваш вопрос.
Чтобы каждый мог обратить внимание на эту информацию.
Преимущество, все будут видеть вашу новую ситуацию как это не решение.
Или откройте новый вопрос, так как этот код также не работает.

Richard MacCutchan

Это просто стандартное программирование на языке Си, где функция вызывается в операторе, а вызов функции заменяется ее возвращаемым значением. Таким образом, вы возвращаете не функцию, а значение, возвращаемое вызовом add.