функция — прототипирование в переполнении стека

Если я создаю прототип функции над основной функцией в моем коде, должен ли я включать все параметры, которые должны быть заданы? Есть ли способ, как я могу просто прототипировать только функцию, чтобы сэкономить время, пространство и память?

Вот код, где я пришел с этим вопросом:

#include <iostream>

using namespace std;

int allesinsekunden(int, int, int);

int main(){
int stunden, minuten, sekunden;

cout << "Stunden? \n";
cin >> stunden;
cout << "Minuten? \n";
cin >> minuten;
cout << "Sekunden= \n";
cin >> sekunden;

cout << "Alles in Sekunden= " << allesinsekunden(stunden, minuten, sekunden) << endl;
}

int allesinsekunden (int h, int m, int s) {
int sec;

sec=h*3600 + m*60 + s;

return sec;

}

1

Решение

«Если я прототипирую функцию выше основной функции в моем коде, должен ли я включать все параметры, которые должны быть заданы?»

Да, иначе компилятор не знает, как разрешено вызывать вашу функцию.
Функции могут быть перегружены в c ++, что означает, что функции с одинаковыми именами могут иметь разное количество и тип параметров. Такое название само по себе недостаточно отчетливо.

«Есть ли способ, как я могу просто прототипировать только функцию, чтобы сэкономить время, пространство и память?»

Нет. Почему, ты думаешь, это сохранит память?

4

Другие решения

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

int allesinsekunden(int, int, int)
{
//...
}

а также

int allesinsekunden(int, int)
{
//...
}

Если вы попытались «прототипировать» (объявить) один из них с

int allesinsekunden;

как бы компилятор узнал, какая функция была объявлена? В частности, как он сможет найти правильное определение для использования в main?

2

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

0
По вопросам рекламы [email protected]