как обновить переменную extern в C - PullRequest
1 голос
/ 07 марта 2012

У меня есть эти файлы

test1.h

extern int value;
void inc_value();
int print_value();

test1.c

#include "test1.h"

int value=0;
void inc_value() 
{

printf("inc value from test3.c = %d\n", value++); 
}

int print_value() 
{

    printf(" value in test1.c  = %d\n", value);
    return value;
}

test3.c

# include "test1.h"

main()
{

inc_value();

}  

test4.c

# include <stdio.h>
#include "test1.h"

main()

{
    printf("value from test4 = %d\n", print_value());
}  

Я обновляю переменную "value" из test3.c и пытаюсь прочитать ее из test4.c. Однако test3.c не может обновить «значение», объявленное в test1.h и определенное в test1.c

Какой момент я здесь упускаю ..

Ответы [ 3 ]

6 голосов
/ 07 марта 2012

Это никогда не сработает.

Вы не можете использовать внешнюю переменную из двух разных программ и волшебным образом ожидать, что она будет работать. Это просто ... неправильно. Каждая программа работает в своем собственном адресном пространстве и ничего не знает о адресных пространствах других процессов. Есть методы для этого (посмотрите межпроцессное взаимодействие), но это совсем другая область.

Способ работы extern заключается в том, что он позволяет вам получить доступ к переменной, определенной в другом файле C в рамках одной и той же программы .

Вы, кажется, неправильно понимаете на фундаментальном уровне, как программы, которые вы пишете, работают и выполняются, поскольку ожидаете, что это сработает. Я рекомендую прочитать больше о том, как работает C, а также, возможно, немного о том, как операционные системы размещают программы для их запуска.

Один из способов обмена информацией между такими программами, как вы описываете, - хранить данные в файле, который записывается одной программой (той, которая запускается первой) и читается другой, но это довольно сложно понять, тоже.

0 голосов
/ 07 марта 2012

Вы должны поместить значение extern int в test3.c и просто поместить значение int в test1.h.Посмотрите на эту ссылку: http://www.learncpp.com/cpp-tutorial/42-global-variables/ Надеюсь, это поможет ...

0 голосов
/ 07 марта 2012

Если вы хотите вызвать void inc_value() из другого файла, вы должны объявить его (вероятно, в заголовке):

void inc_value();

Если вы хотите получить прямой доступ к value, вы можете, как этобыло объявлено как extern:

# include "test1.h"
main()
{
    value = 6;
}  

Также обратите внимание, что в текущей реализации inc_value значение будет увеличиваться после его передачи в printf, например, напечатанное значение будет предыдущим.

...