статический константный указатель на глобальную переменную

Как я могу объявить статический указатель const на глобальную volatile?

У меня есть это до сих пор, но я не уверен, что это правильно:

// a.c
volatile bool flag_it_1;
volatile bool flag_it_2;

// a.h
extern volatile bool flag_it_1;
extern volatile bool flag_it_2;

// b.c
#include "a.h"
static volatile bool *const flag_it_ptr = &flag_it_1;

Изменить: я использую это так:

if (*flag_it_ptr) {
        // work
        *flag_it_ptr = false;
}

Для тех, кто интересуется, почему я использую этот указатель: я могу изменить переменную, которую я использую, от компиляции к компиляции, и не хочу менять имена во всем файле, поэтому я меняю ее один раз. Более или менее похоже на макрос или константную глобальную переменную.

Это верно?

Изменить: он скомпилирован на gcc


person alx    schedule 17.01.2019    source источник
comment
Вы пробовали? Даже если это не окончательно, если компилятор это допускает, то это хороший намек на то, что, вероятно, все в порядке.   -  person Some programmer dude    schedule 17.01.2019
comment
Компилятор разрешил. Однако в других случаях я несколько раз ошибался, предполагая, что если он скомпилируется, он будет делать то, что я предполагал.   -  person alx    schedule 17.01.2019
comment
Вы также можете определить встроенный геттер в a.h что-то вроде bool isFlag(void) { return flag_it_1;}, в любом случае, согласно const, вы не собираетесь его изменять....   -  person Alex Lop.    schedule 17.01.2019
comment
Выглядит нормально для меня.   -  person PSkocik    schedule 17.01.2019
comment
const есть, чтобы указатель не модифицировался. Однако изменчивый флаг будет изменен в b.c. На самом деле, я делаю: *flag_it_ptr = false;   -  person alx    schedule 17.01.2019


Ответы (1)


Эта конструкция просто объявляет константный указатель на неконстантный объект. Таким образом, вам разрешено изменять ссылочный объект, но не сам указатель.

 #define flag_it_ptr flag_it_1 

будет выполнять работу без указателей. Мне кажется, вы слишком усложняете простые вещи.

person 0___________    schedule 17.01.2019
comment
Я думал об этом, но я не чувствую себя очень комфортно с этим. Не знаю почему, но указатель кажется мне более безопасным. - person alx; 17.01.2019
comment
Это не дает вам никакой безопасности - person 0___________; 17.01.2019
comment
Да, я думал об этом, и единственная причина, по которой я нашел указатель, заключается в том, что я помню, что это volatile bool, о котором я мог бы забыть, если бы использовал макрос. - person alx; 17.01.2019