Программа является недействительной C программой."hai"
имеет тип char [4]
и в контексте оператора возврата он уменьшается до char *
.
Однако функция должна вернуть int
.В контексте return
это происходит, если по присваиванию.
A char *
можно преобразовать в int
, но для этого требуется явное приведение.В отсутствие явного приведения это нарушение ограничения, и компилятор должен выдать диагностическое сообщение, которое gcc
делает:
warning: return makes integer from pointer without a cast [-Wint-conversion]
return "hai";
^~~~~
Наконец: стандарт Cупоминания в сноске :
[соответствующая реализация] также могут успешно переводить недопустимую программу.