Похоже, что это "старая школа" C-код.Объявление типов параметров за пределами круглых скобок, но до открытой скобки блока кода, является пережитком первых дней программирования на C (я не уверен, почему, но я думаю, что это как-то связано с управлением переменными вдизайн стека и / или компилятора).
Чтобы ответить на ваши вопросы:
Называть C ++ "надмножеством" C - несколько неверно.Несмотря на то, что они имеют общие функции синтаксиса, и вы даже можете делать все виды вызовов библиотеки C из C ++, они имеют разительные различия в отношении безопасности типов, предупреждений и ошибок (C более допустим) и параметров компилятора / препроцессора.
Большинство современных компиляторов C понимают унаследованный код (такой, как этот).Компилятор C хранит имена параметров функций вроде «заполнителей», пока их тип не может быть объявлен сразу после имени заголовка функции.
Никаких реальных «целей», кроме как снова, это не появляетсябыть древним кодом, и стиль в те времена был таким.«Нормальный» подход - это IMO - лучший, более интуитивный способ.
Мое предложение:
хэш unsigned int (зарегистрируйте char * str, зарегистрируйте int без знака размера) {// Определение}
Совет: рассмотрите возможность отказаться от ключевого слова register
- оно использовалось в старых программах на C как способ указать, что переменная будет храниться в памятизарегистрироваться (для скорости / эффективности), но в настоящее время компиляторы лучше оптимизируют эту потребность.Я считаю, что современные компиляторы игнорируют это.Кроме того, вы не можете использовать оператор &
(адрес) в C / C ++ для переменной register
.