Как C передает аргументы по значению, нет никакой разницы между
void foo(int bar);
и
void foo(const int bar);
, насколько вызывающий код обеспокоен.
Таким образом, const -qualifying параметр non-pointer, возможно, делает деталь внутренней реализации частью публичного API.
Другим решением было бы объявить функцию без const
в заголовке и только добавить его к определению (как Oli Чарльзуорт предполагает в комментариях, а), то есть
// in header file
extern void foo(int bar);
// in source file
void foo(const int bar)
{
// ...
}
который - насколько Я знаю - законный из-за последнего предложения C99 6.7.5.3 §15.
Я не вижу никакого преимущества перед объявлением параметра 'const' в первую очередь. –
@Oli: определение параметров не указателя 'const' можно рассматривать как утечку деталей реализации ... – Christoph
@ Кристоф: Это не влияет на внешний мир. Вы можете объявлять свои функции с помощью не-const-параметров в вашем общедоступном API, а затем использовать 'const' в определении. (Фактически это именно то, что я делаю.) –