Возвращаемое значение функции, определенное как константа
Я видел в нескольких случаях функции, которые должны быть определены с помощью классификатора типа 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.