При запуске с некоторым кодом MFC, созданным VS2005, я заметил, что он переопределяет метод с чем-то вроде этого:
void OnDraw(CDC* /*pDC*/)
{
...
// TODO: Add your code here
}
Итак, как только я добавил что-то, я понял, что мне нужно отменить комментарий формального аргумента pDC для компиляции, но я смущен относительно того, как/почему функция С++ может компилироваться (без предупреждений) когда формальный аргумент имеет только тип, а не имя:
void foo(int)
{
int x = 3;
}
int main()
{
foo(5);
return 0;
}
Не должно ли это генерировать хотя бы предупреждение (с -Wall или /W 4)? Кажется, это не так. Я что-то упускаю? Есть ли случай, когда это полезно или просто потому, что компилятор не может определить разницу между объявлением функции (только требуемые типы) и определением (полностью указанным) до тех пор, пока строка не будет обработана?