Возвращаемое значение функции, определенное как константа

Я видел в нескольких случаях функции, которые должны быть определены с помощью классификатора типа const, как это:

const int foo (int arg)

В чем смысл этого? Возвращаемое значение функции не может быть изменено в любом случае.

Ответы

Ответ 1

Согласно спецификации C (C99, раздел 6.7.3):

Свойства, связанные с квалифицированными типами, имеют смысл только для выражений, которые являются lvalues.

Функции не lvalues, поэтому ключевое слово const для них не имеет смысла. Компилятор будет игнорировать их во время компиляции.

Ссылка: Интернет-стандарт C99

Ответ 2

В C это действительно бесполезно, и компиляторы могут выдавать соответствующие предупреждения:

$ echo 'const int foo (int arg);' | clang -Weverything -fsyntax-only -xc -
<stdin>:1:1: warning: 'const' type qualifier on return type has no effect
      [-Wignored-qualifiers]
const int foo (int arg);
^~~~~~
1 warning generated.