Форум программистов, компьютерный форум CyberForum.ru

Функции с типом но без имени параметра - C++

Восстановить пароль Регистрация
 
Prostoplus
 Аватар для Prostoplus
11 / 1 / 0
Регистрация: 21.09.2012
Сообщений: 122
22.08.2014, 14:19     Функции с типом но без имени параметра #1
Добрый день. Встретил следующую функцию:
C++
1
2
3
4
5
6
7
8
9
void f(int)
{
    //код
}
//почему не так ?
void f1(int i)
{
    //код
}
При вызове такой функции обязательно передавать ей какое-то int-значение.
Вопрос: почему не указано имя параметра и как такой аргемент в функции использовать? Зачем в С++ вообще разрешено не указывать при объявлении название аргументов? Для чего это нужно?
Лучшие ответы (1)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Jupiter
Каратель
Эксперт C++
6542 / 3962 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
22.08.2014, 14:28     Функции с типом но без имени параметра #2
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от Prostoplus Посмотреть сообщение
как такой аргемент в функции использовать?
никак

Цитата Сообщение от Prostoplus Посмотреть сообщение
почему не указано имя параметра
значит аффтору он нафиг не нужен или см. ниже

Цитата Сообщение от Prostoplus Посмотреть сообщение
Зачем в С++ вообще разрешено не указывать при объявлении название аргументов? Для чего это нужно?
а почему нет? ну например чтоб сократить количечество символов в прототипе
C++
1
2
//foo.h
void foo(int);
C++
1
2
3
4
5
6
//foo.cpp
#include "foo.h"
 
void foo(int value)
{
}
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
22.08.2014, 14:31     Функции с типом но без имени параметра #3
Prostoplus,
1) А почему должно быть обязательно указывать имена параметров в .h файле (учитывая, что уж там-то они точно не используются)?
2) В .cpp файле это может быть просто неиспользуемым параметром, который использовался раньше, а сейчас нет. Может быть для него объявлено значение по умолчанию в .h файле. Может быть это перегрузка функции. Может быть ...
Prostoplus
 Аватар для Prostoplus
11 / 1 / 0
Регистрация: 21.09.2012
Сообщений: 122
22.08.2014, 14:34  [ТС]     Функции с типом но без имени параметра #4
Jupiter, спасибо, про прототипы функций я знаю. Но ведь это не прототип функции, и объявлен в СРР файле.
Просто не логично объявлеть, что ф-я принимает параметр, а потом его не использовать.
DieMore
3 / 3 / 2
Регистрация: 21.08.2014
Сообщений: 17
22.08.2014, 14:36     Функции с типом но без имени параметра #5
Prostoplus, а можете код показать?
Prostoplus
 Аватар для Prostoplus
11 / 1 / 0
Регистрация: 21.09.2012
Сообщений: 122
22.08.2014, 14:39  [ТС]     Функции с типом но без имени параметра #6
DieMore, код из примеров С++ Builder:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
bool __stdcall EnumProc(HWND hWnd,/*LPARAM*/long/*lp*/)
{
   unsigned long* pPid;   //LPDWORD
   unsigned long result;      //DWORD
   void *hg;                  //HGLOBAL
   unsigned long id;
 
   if(hWnd==NULL)
      return false;
 
   hg = GlobalAlloc(GMEM_SHARE,sizeof(unsigned long));
   pPid = (unsigned long *)GlobalLock(hg);
 
   result = GetWindowThreadProcessId(hWnd,pPid);
 
   if(result){
      char title[110];
      char className[95];
      char totalStr[256];
      GetClassName(hWnd,className,95);
      GetWindowText(hWnd,title,110);
      id=*pPid;
      ultoa(id,totalStr,10);
      strcat(totalStr,"\t");
      if(title){
         strcat(totalStr,title);
         strcat(totalStr,"\t");
      }
      strcat(totalStr,className);
      FormMain->ListBox1->Items->Add((AnsiString)totalStr);
   }
   else{
      GlobalUnlock(hg);
      GlobalFree(hg);
      return false;
   }
   GlobalUnlock(hg);
   GlobalFree(hg);
   return true;
}
Мне было непонятно почему функция работает, ведь там закомментировано /*LPARAM*/long/*lp*/.
John Prick
754 / 687 / 123
Регистрация: 27.07.2012
Сообщений: 1,974
Завершенные тесты: 3
22.08.2014, 14:58     Функции с типом но без имени параметра #7
Вызывать эту функцию нужно с двумя параметрами, хотя второй в ней никак не используется.
C++
1
2
EnumProc(hwnd); // ошибка
EnumProc(hwnd, 100500); // ок
DrOffset
6424 / 3798 / 879
Регистрация: 30.01.2014
Сообщений: 6,592
22.08.2014, 18:40     Функции с типом но без имени параметра #8
Цитата Сообщение от Prostoplus Посмотреть сообщение
Просто не логично объявлеть, что ф-я принимает параметр, а потом его не использовать.
Если EnumProc, например, виртуальная функция, то в других ее воплощениях этот параметр может быть нужен, а здесь нет. Обычно не пишут имя, чтобы не было предупреждения, что параметр не используется.

Добавлено через 1 минуту
Или раньше он использовался, но в процессе разработки программы перестал быть нужен, а интерфейс уже устоялся, поэтому чтобы не менять в 100500 местах два параметра на один, его просто не используют.

Добавлено через 1 минуту
Или наоборот (особенно актуально для С, где нет перегрузки), ввели параметр с заделом на будущее, пока он не используется, но в будущем - будет.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.08.2014, 20:15     Функции с типом но без имени параметра
Еще ссылки по теме:

C++ Как искать функции, работающие с определенным типом?
Привсоение масиву указателей объекты без имени C++
Что может структура без имени? C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Toshkarik
 Аватар для Toshkarik
1139 / 856 / 50
Регистрация: 03.08.2011
Сообщений: 2,381
Завершенные тесты: 1
22.08.2014, 20:15     Функции с типом но без имени параметра #9
В wxWidgets в функцию-обработчик события передается объект wxEvent. В большинстве случаях, он не нужен, поэтому в определении функции не указывают имени, что бы избежать warning`а о неиспользуемом объекте.
Yandex
Объявления
22.08.2014, 20:15     Функции с типом но без имени параметра
Ответ Создать тему
Опции темы

Текущее время: 18:53. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru