Переназначить int на const int? - PullRequest
4 голосов
/ 24 февраля 2012

Я читаю базу кода C и нашел фрагмент, который выглядит примерно так:

void foo(int bar) {
    const int _bar = bar;
    ...
}

Затем автор использует _bar в остальной части кода. Почему это сделано? Это оптимизация или есть какая-то другая причина?

Ответы [ 3 ]

6 голосов
/ 24 февраля 2012

Затем автор использует _bar во всем остальном коде.

Если _bar используется через out и не использует параметр функции, я бы квалифицировал параметр функции как const.

void foo( const int bar )
{
     // use bar but modifications to bar itself are not allowed.
}
4 голосов
/ 24 февраля 2012

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

Если параметр не изменился по сравнению с вводом функции, автор мог бы поместить const в сигнатуру параметра, как в void foo (int const bar) { ... }.

3 голосов
/ 24 февраля 2012

Поскольку C передает аргументы по значению, нет разницы между

void foo(int bar);

и

void foo(const int bar);

в отношении вызывающего кода.

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

Другим решением было бы объявить функцию без const в заголовке и добавить ее только к определению (как это предлагает Оли Чарльзуорт в комментариях), т.е.

// in header file
extern void foo(int bar);

// in source file
void foo(const int bar)
{
    // ...
}

что, насколько я знаю, является законным в связи с последним предложением C99 6.7.5.3 §15.

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