2016-08-26 3 views
1

Я столкнулся с проблемой в C, где я пытаюсь использовать некоторые getter и setter для обмена переменной между несколькими исходными файлами.Getter & Setter in C

Я объявляю здесь свою переменную (ok_button) с геттер и сеттер:

variable.c

#include <stdio.h> 
#include <sys/types.h> 
#include <unistd.h> 
#include <string.h> 
#include "../libhd_src/libhd.h" 

int ok_button; 

void set_ok_button(int value){ 
    ok_button=value; 
    printf("Setting ok"); 
} 

int get_ok_button(){ 
    return ok_button; 
} 

Здесь, когда я нажать на кнопку, она устанавливает переменную 1. (Can Не загружайте полный код этого исходного файла, но я вижу в своих журналах, что функция set_ok_button правильно выполняется, когда я нажимаю (я вижу печать «Настройка ОК» каждый раз, когда я нажимаю свою кнопку)

button.c

#include "../libhd_src/libhd.h" 
#include <stdio.h> 
#include <sys/types.h> 
#include <unistd.h> 
#include <math.h> 
#include <time.h> 

void * button_back_center_short(void *arg){ 
    set_ok_button(1); 
    return 0; 
    } 

И здесь я просто проверяю значение моей переменной с помощью функции getter.

read.c

#include <stdio.h> 
#include <sys/types.h> 
#include <unistd.h> 
#include <math.h> 
#include <time.h> 
#include "../../libhd_src/libhd.h" 



int main(int argc, char **argv){ 

while(1){ 
     printf("Value %d", get_ok_button()); 
     usleep(500000); 
     } 
} 

Проблема заключается в том, что значение, отображаемое в read.c всегда «0», даже когда я прижимаюсь кнопку и установите значение 1 ...

ли кто-то понимает, что не так? Не стесняйтесь сказать мне, если вы видите лучшее решение для этого:

+0

Это похоже на неправильный способ сделать это. Что такое содержимое * libhd.h *? Вы не должны использовать глобальные переменные для такого рода вещей. –

+0

Где вы меняете стоимость? (установлено в 0) –

+3

Поскольку ваш 'main()' никогда не пишет в 'ok_button', я предполагаю, что модификации, которые * * * выполнены, являются асинхронными (в обработчике сигналов или аппаратным обеспечением). В этом случае 'ok_button' должен быть * как минимум *' volatile', возможно, 'volatile sig_atomic_t' или без блокировки атома. – EOF

ответ

0

Я думаю, что ваша проблема может заключаться в том, что у вас есть несколько функций set_ok_button и get_ok_button в разных файлах. Убедитесь, что вы только определили их в одном файле, а в заголовке добавьте 2 строки, объявляя (но не определяя) функции:

void set_ok_button(int value); 
int get_ok_button();