Как работает это определение функции?

Пару дней назад я сгенерировал хеш-функцию с помощью gperf . То, что я увидел для хэш-функции , было мне чуждо. Это было примерно так (я не помню точный синтаксис):

unsigned int
hash(str, size)
   register char* str;
   register unsigned int size;
{
   //Definition
}

Теперь, когда я пытался скомпилировать компилятор C ++ (g ++), он выдал мне ошибку из-за отсутствия str и размер объявлен. Но это скомпилировано на компиляторе C (gcc). Итак, вопросы:

  1. Я думал, что C ++ - это надмножество C. Если это так, то он тоже должен компилироваться с компилятором C ++, верно?
  2. Как компилятор C понимает определение? str и size не объявлены при первом появлении.
  3. Какова цель объявления str и size после сигнатуры функции, но перед телом функции, а не в соответствии с обычным подходом, когда это делается в любом из двух мест?
  4. Как мне заставить эту функцию скомпилироваться на g ++, чтобы я мог использовать ее в своем коде на C ++? Или мне попробовать сгенерировать код C ++ из gperf? Возможно ли это?
6
задан nakiya 21 November 2010 в 04:06
поделиться