Могу ли я позволить функции C использовать внешние переменные, не позволяя ей изменять их? - PullRequest
0 голосов
/ 26 апреля 2018

Если у меня есть глобальная переменная "x", используемая функцией C

int foo() {

    extern int x;

    return x;

}

Могу ли я запретить foo модифицировать x?Т.е. относиться к х так же, как к альтернативе, приведенной ниже?

int foo(const int x) {

    return x;

}

1 Ответ

0 голосов
/ 26 апреля 2018

Метод первый: Const Copy

#define HorribleHackStart(Type, Name) \
    Type HorribleHackTemp = Name; { const Type Name = HorribleHackTemp;

#define HorribleHackEnd \
    }

int foo(void)
{
    HorribleHackStart(int, x)
    ... Here x is an unchanging const copy of extern x.
    ... Changes made to x (by other code) will not ge visible.
    HorribleHackEnd
}

Метод второй: указатель

int foo(void)
{
    #define x (* (const int *) &x)
    ... Here x is effectively a const reference to extern x.
    ... Changes made to x (by other code) will be visible.
    #undef x
}

Комментарии

Я бы не использовал ни один из них в рабочем коде, но ониможет быть полезно, если вы хотите скомпилировать код для проверки на предмет нарушения требования const для x внутри функции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...