Почему компилятор интерпретирует присвоение как определение - PullRequest
0 голосов
/ 04 апреля 2020

Пример программы c приведен ниже:

#include <stdio.h>

int i = 10;
i = 25;

int main(void)
{
    printf("%d\n", i);
    return 0;
}

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

warning: data definition has no type or storage class
i = 25;
^
warning: type defaults to ‘int’ in declaration of ‘i’ [-Wimplicit-int]
error: redefinition of ‘i’
note: previous definition of ‘i’ was here
int i = 10;

Я переназначил значение к этой переменной i. Почему компилятор интерпретирует это как переопределение?

1 Ответ

3 голосов
/ 04 апреля 2020

вы можете объявить переменную вне функции и инициализировать ее. но это i = 25; неверно, поскольку присвоение значения переменной должно выполняться внутри функции.

int i = 10;

int main(void)
{
    i = 25;//this should be inside of function
    printf("%d\n", i);
    return 0;
}

также, поскольку @rustyx, упомянутый в комментариях, тип данных глобальной переменной по умолчанию - int, поэтому здесь i = 25;, вы как будто переопределяете int i, а не присваиваете ему значение.

...