Вы вызываете undefined behavior, не возвращая ничего из функции возврата значения. Если мы посмотрим на draft C99 standard разделе 6.8.6.4
Ответное заявление говорит:
[...] Ответное заявление без выражения должно появляться только в функции , возвращение типа является недействительным.
Вы действительно должны иметь никаких ожиданий относительно того, как это должно работать, но вы можете сделать несколько хороших догадки, как Deep C презентации демонстрирует в нескольких разделах, но я никогда не делал бы все это в производственной среде.
Если у вас предупреждений включен, то вы должны были увидеть несколько информационных сообщений, например gcc
предоставляет следующие предупреждения:
warning: implicit declaration of function ‘message’ [-Wimplicit-function-declaration]
warning: return type defaults to ‘int’ [enabled by default]
warning: ‘return’ with no value, in function returning non-void [enabled by default]
Вы также полагаться на неявные типы возвращаемых значений больше не разрешается, так как C99, но компиляторы, как gcc
поддерживают их даже в режиме C99. Так что, если это так, то message
будет иметь неявный тип возврата int
.
Ваши разъяснения неверны. В C нет «аккумулятора», и стандарт не позволяет пустующему возврату возвращать что-либо полезное. Компиляция с ошибками покажет, что это неверный код, и эффект, который вы получаете, - это неопределенное поведение. – usr2564301
@ Jongware: замените «eax» на Intel 32-bit »для« Accumulator »и добавьте предостережения о неопределенном поведении, и объяснение в значительной степени правильное для компилятора, который использует OP. – RichieHindle
@RichieHindle: ни 'eax', ни« Intel »не являются частью стандарта C (* any * из них, так как есть пара). – usr2564301