Как вы можете использовать составные операторы присваивания в C, если вы не можете переопределять переменные?

В википедии написано:

a -= b;

такой же как

a = a - b;

Но когда я пытаюсь это сделать в своей программе на C, я получаю следующую ошибку:

"error: redefinition of 'a'".

Вот моя программа:

#include <stdio.h>

int main(int argc, char *argv[])
{
    int a = 10;
    int a -= 5;

    printf("a has a value of %d\n", a);

    return 0;
}

Я получил следующие ошибки:

my_prog.c:6:6: error: redefinition of 'a'
       int a -= 5; 
           ^
my_prog.c:5:6: note: previous definition is here
       int a = 10;
           ^
my_prog.c:6:8: error: invalid '-=' at end of declaration; did you mean >'='?
       int a -= 5; 
             ^~

Я использую clang на Mac.


person CClarke    schedule 29.06.2020    source источник
comment
Пожалуйста, отредактируйте свой вопрос с помощью минимальный воспроизводимый пример или SSCCE (короткий, автономный, правильный пример)   -  person NathanOliver    schedule 30.06.2020
comment
Не хватает точки с запятой.   -  person stark    schedule 30.06.2020
comment
Что касается контекста, я добавил свой код, и я думаю, что заголовок вполне ясен.   -  person CClarke    schedule 30.06.2020
comment
int a.... - это определение. Но вы уже определили его. Вместо этого вам нужно выражение. Удалить int.   -  person Eugene Sh.    schedule 30.06.2020
comment
Название понятно программисту R, потому что в R присваивание является определением. В C оператор присваивания изменяет значение существующей переменной. Он не создает новую переменную и не может использоваться для изменения типа существующей переменной.   -  person user3386109    schedule 30.06.2020


Ответы (2)


int a = 10 - это определение.

Он объединяет объявление имени и типа переменной (int a) с ее инициализацией (a = 10).

Язык не допускает множественных определений одной и той же переменной, но позволяет изменять значение переменной несколько раз с помощью оператора присваивания (a = 10 или a = a - b или
a -= b и т. д.).

Ваш код должен быть:

#include <stdio.h>

int main(int argc, char *argv[])
{
    int a = 10;    // declare variable `a` of type `int` and initialize it with 10
    a -= 5;        // subtract 5 from the value of `a` and store the result in `a`

    printf("a has a value of %d\n", a);

    return 0;
}
person axiac    schedule 29.06.2020
comment
Вы, вероятно, правы. Я не писал код на C в этом десятилетии и немного их перепутал :-( - person axiac; 30.06.2020

Определение a делается так:

int a;

Инициализация a выполняется так:

a = 10;

Вы делаете оба в том же выражении:

int a = 10;

Теперь a определено и инициализировано.

Если вы сделаете следующее:

int a -= 5;

После предыдущего выражения вы переопределяете a, отсюда и ошибка.

Вам нужно только:

a -= 5;
person anastaciu    schedule 29.06.2020