"Int a;" объявление или определение в C и в C ++? - PullRequest
7 голосов
/ 18 декабря 2010

Является ли int a; декларацией или определением в C? Есть ли разница в C ++?

Я всегда думал, что это просто декларация, до сегодняшнего дня ...

Это декларация или определение?

Ответы [ 3 ]

18 голосов
/ 18 декабря 2010

A объявление описывает объект, тогда как определение запрашивает создание объекта. Все определения также декларации , но обратное неверно.

В случае int a; значение зависит от того, где оно находится в исходном коде:

  • Внутри функции int a; является определением - она ​​запрашивает создание int переменной с автоматическим сроком хранения (и, конечно, также объявлением);
  • В области действия файла ответ различается в C и C ++. В C int a; является предварительным определением (из которых может быть более одного, при условии, что типы и связь являются приемлемыми); в C ++ это обычное определение с внешней связью.
  • В спецификаторе struct или union, int a; является объявлением члена.
6 голосов
/ 18 декабря 2010

Где это появляется в вашей программе?

В большинстве случаев это и объявление, и определение.

OTOH, extern int a; является только декларацией.

0 голосов
/ 16 января 2015

Рассмотрим:

int a;

Это определение, а также декларация.

Рассмотрим следующий пример ...

int i;
printf("%d", i);

Будет напечатано некоторое количество ненужного. Что, очевидно, означает, что у него есть место в памяти.

Если вы хотите просто объявить переменную, а не определить ее, перейдите к ключевому слову "extern".

Таким образом, extern int b; является просто декларацией, а не определением.

Пример:

extern int var;
int main(void)
{
    var = 10;
    return 0;
}

Таким образом, вышеприведенная программа выдаст ошибку, поскольку «var» нигде не определен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...