2016-08-25 5 views
-6

Почему этот код не работает:Почему мы не можем изменить глобальную переменную внутри функции C?

#include <stdio.h> 

int n=2; 

void add(void) 
{ 
    n+n+2; 
} 

void main() 
{ 
    for (int g=0;g<10;g++) 
    { 
     add(); 
    } 
    printf("Result = %i\n",n); 
} 

Конечно, это должно быть возможно изменить глобальную переменную n из функции?

+2

Вы никогда ничего не меняете. – QBrute

+0

Возможно, вы имели в виду n = n + 2; Там должно быть аффектация где-то – NGI

+2

В следующий раз посмотрите на предупреждения компилятора и исправьте их. – user3386109

ответ

7

В коде

n+n+2; 

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

Например, вы можете написать n+=2 (, если вы имели в виду, чтобы написать n = n +2 ; фактически) и проверить обновленное значение.

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

Тем не менее, for (int g=0;g<10;g++) является синтаксис пост- C99, так, чтобы они соответствовали стандартам, для принимающей среды, подпись main() должна быть int main(void), по крайней мере.

+0

Конечно, он должен был напечатать предупреждение, но это не требуется (и gcc не по умолчанию). –

+1

@KeithThompson Справа сэр, это не требуется, но не согласны ли вы, что поднятие уровня предупреждения почти всегда помогает найти скрытые проблемы? –

+1

@KeithThompson: Предупреждения по умолчанию (почти) любого компилятора вообще недостаточны. Все пользователи должны включить, по крайней мере, рекомендуемые предупреждения. – Olaf

Смежные вопросы