Поскольку 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.