Как указано на карте памяти, вы, вероятно, пренебрегли #include <stdlib.h>
. Причина в том, что, не имея декларации atof()
, стандарт C указывает, что возвращаемое значение считается int
. В этом случае это не int
, что означает, что фактическое поведение, которое вы наблюдаете (получение возвращаемого значения 0
), технически не указано.
Для того, чтобы быть ясно, без double
-returning декларации, линия ddd=atof(argv[1])
трактуется как вызов к int
-returning функции, чей результат затем приводится к double
. Вполне вероятно, что соглашения о вызовах в конкретной системе, в которой вы находитесь, указывают, что int
s и double
s получаются в разных регистрах, поэтому 0
, скорее всего, будет тем, что оказалось в этом конкретном регистре, а double
возвращаемое значение томится, ненаблюдается.
Были ли у вас какие-либо ошибки/предупреждения от вашего компилятора, когда вы пытались скомпилировать это? –
Вы имели в виду, что он возвращает 0 или печатает 0? Потому что вы сказали ему вернуть 0 на последней строке. – Pyrce
Я уточнил свой вопрос. Спасибо за указание на это. –