Декларация против Прототипа против Символа против Определения против Реализации - PullRequest
1 голос
/ 02 мая 2011

Я вижу, что термины «объявление», «прототип» и «символ» часто взаимозаменяемы, когда дело доходит до кода, подобного следующему:

void MyUndefinedFunction();

То же самое относится к "определению" и "реализации" для таких вещей:

void MyClass::MyMethod()
{
    // Actual code here.
}

Есть ли различия между терминами, как с "аргументом" и "параметром"? Или они действительно синонимы?

Примечание: я не уверен, принадлежит ли это здесь или программистам, поэтому я разместил его на обоих сайтах. Если у кого-то есть какие-либо возражения, дайте мне знать, и я его удалю.

Ответы [ 2 ]

1 голос
/ 02 мая 2011

Разница между объявлением и прототипом в основном в C, где следующее объявление не является прототипом:

int foo();

Обратите внимание, что это отличается от:

int foo(void);

последний является прототипом для функции, не имеющей аргументов, тогда как первый является объявлением для функции, типы аргументов которой не указаны в объявлении.На самом деле это может быть полезно, чтобы избежать приведения типов указателей на функции с определенным использованием указателей на функции, но это очень легко испортить, а путаница вызывает непредсказуемое поведение.Многие программисты на Си считают объявления, не являющиеся прототипами, вредными, и gcc имеет параметр предупреждения, чтобы пометить их.

1 голос
/ 02 мая 2011

Если вы не сталкиваетесь с пуристом, они, как правило, взаимозаменяемы, за исключением символа и прототипа (трудно дать абсолютные значения на )

  • символ обычно относится к точке подключения для соединения 2 битов кода, такой как точка входа в библиотеку или цель для разрешения статического связывания
  • prototype , как правило, относится к определению того, чтофункция / метод выглядит как (аргументы, возвращаемый тип, имя, различные типы видимости), но не включает реализацию.

Вы пропустили функцию и метод, но мое определение:

  • функция вызываемый бит кода, который не привязан к объекту
  • метод вызываемый бит кода в пространстве имен объекта,Обычно реализуется компилятором как функция, которая принимает экземпляр объекта в качестве первого аргумента.

Возможно, параметр указывает на ограничение объема и, следовательно, только для чтения.

Примечание Если вы спросите пуриста, у вас больше шансов получить аргумент , чем параметр .

...