Другие языки программирования и технологии

Вопрос насчет объявления и параметра функции в C++

Если функция была объявлена как void func(int) и определена как void func(int k). То это значит, что на месте k может быть другое имя переменной, но тот же тип и число параметров? А если функция была объявлена как void func(int k), а определенна как void func(int). То смысл от такого определения? Ведь параметр без имени, а значит нет возможности получить его значение. Или это получается сделать через указатели и работоспособность такой записи оставлена для них? Так как у параметра нет имени, но видимо есть адрес.
Работоспособность такой записи оставлена для того, что бы просто не использовать этот аргумент в теле функции. К примеру, если нужна функция-callback, сигнатура которой жестко задана, но в ней не нужно использовать данные аргумент, или есть функция, параметром которой служит другая функция опять же с аргументом, но нужно создать передать функцию, где этот аргумент не используется:

#include <iostream>

// функция, аргументом которой является другая функция с аргументом
void caller(void(*cb)(int)) { cb(5); }

// функция, для передачи в caller
void f(int) { std::cout << "f\n"; } // аргумент в теле не используется

int main() { caller(f);return 0; }

Конечно, можно написать и имя аргумента
void f(int k) { std::cout << "f\n"; }
но если задан жесткий уровень контроля за кодом во время компиляции (уровень предупреждений) , то при компиляции получим неприятный warning. К примеру, компилятор g++ ругнется:
warning: unused parameter 'k' [-Wunused-parameter]

К тому же, если твой код будут изучать другие люди, то запись аргумента без имени явно покажет им, что данный аргумент не используется в функции, т. е. ты эту функцию сознательно именно так реализовал и не допустил ошибок.
Александр Бусыгин
Александр Бусыгин
52 977
Лучший ответ
В прототипах функций, при объявлении, указывать имена формальных параметров не обязательно. Это следует делать в определении функция.
Для использования функции нужно её объявить, определить и вызвать. Например:

#include <iostream>

void func(int, int); // объявление

int main() {
int a = 5, b = 7;
func(a, b); // вызов
return 0;
}

void func(int x, int y) { // определение
std::cout << x + y;
std::cin.get();
}

> интегральная переменная если дословно перевести
а float - военно-морская, блядь!
DK
Dim Ka
83 314
Поток сознания...
СУ
Саят Умаров
15 097
В параметре ты указываешь тип и имя переменной. Как же тупо с интом работать)
с просто int не сработает int означает интежер, интегральная переменная если дословно перевести. И лучше писать тогда полностью integer
Askar Nurtayev
Askar Nurtayev
1 787