?

Log in

Программистское - Оживший юзерпик

Dec. 10th, 2004

05:56 pm - Программистское

Previous Entry Share Next Entry

Скажите, господа, как вы думаете, что, по-вашему, печатает на экране эта программа:

main()
{
printf( "%f\n", strtod( "0", 0 ) );
}

А что она на самом деле у вас печатает? А почему?

Current Mood: глумливое

Comments:

(Screened comment)
[User Picture]
From:tobotras
Date:December 10th, 2004 07:03 am (UTC)
(Link)
Неинтересно с вами, анонимы :) Ты хоть кто? :)
(Reply) (Parent) (Thread)
From:(Anonymous)
Date:December 10th, 2004 07:31 am (UTC)
(Link)
Фидошник :)

А что, была б какая-то ЛЖная аброкадабра -- что поменялось бы? :)
Все одно ж мы на 90% взаимно не знакомы.
(Reply) (Parent) (Thread)
[User Picture]
From:maxcom
Date:December 10th, 2004 07:05 am (UTC)
(Link)
а я предупреждал, что функция, возвращающая не int - ересь :-)
(Reply) (Thread)
From:kent_turbo
Date:December 10th, 2004 07:18 am (UTC)
(Link)
Ересь не функция возвращающая не int, а ересь не использовать -Wall. :)
(Reply) (Parent) (Thread)
[User Picture]
From:rmrfchik
Date:December 10th, 2004 07:18 am (UTC)
(Link)
Сам ты ересь.

(lambda (make-eres x)
(lambda (y)
(+ (sin y) x)))
(Reply) (Parent) (Thread)
From:kent_turbo
Date:December 10th, 2004 07:17 am (UTC)
(Link)
Печатать должна 0.000, но не будет. Ибо implicitly defined strtod будет возвращать int вместо double. Поэтому напечатает какую-нибудь ересь.

Реально печатает -1.999210.

Хорошая шутка, ага. :)
(Reply) (Thread)
[User Picture]
From:dil
Date:December 10th, 2004 07:20 am (UTC)
(Link)
вот в таком виде - фигню всякую.
А если добавить правильный include, тогда 0.000000
(Reply) (Thread)
[User Picture]
From:bobuk
Date:December 10th, 2004 07:21 am (UTC)
(Link)
Смеялись всем яндексом. Спасибо :)
(Reply) (Thread)
[User Picture]
From:erra
Date:December 10th, 2004 07:23 am (UTC)

как это ни смешно, зависит от компилятора и OS

(Link)
> gcc -nostdinc -Wall -o test test.c
test.c: In function `main':
test.c:2: warning: implicit declaration of function `printf'
test.c:2: warning: implicit declaration of function `strtod'
test.c:2: warning: double format, different type arg (arg 2)
test.c:3: warning: control reaches end of non-void function
> ./test
0.000000
> uname -a
FreeBSD *** 5.3-STABLE FreeBSD 5.3-STABLE #16: Fri Nov 12 22:01:41 MSK 2004
> gcc -v
Using built-in specs.
Configured with: FreeBSD/i386 system compiler
Thread model: posix
gcc version 3.4.2 [FreeBSD] 20040728

притом gcc 3.4.2 на Linux'е честно возвращает ахинею ;>
(Reply) (Thread)
[User Picture]
From:sha90w
Date:December 10th, 2004 07:33 am (UTC)

вот

(Link)
> cat 1.c
main()
{
printf( "%f\n", strtod( "0", 0 ) );
}
> gcc -o 1 -Wall 1.c
1.c:2: warning: return-type defaults to `int'
1.c: In function `main':
1.c:3: warning: implicit declaration of function `printf'
1.c:3: warning: implicit declaration of function `strtod'
1.c:3: warning: double format, different type arg (arg 2)
1.c:4: warning: control reaches end of non-void function
> ./1
0.000000
> gcc -v
Reading specs from /usr/lib/gcc-lib/i386-unknown-linux/2.95.3/specs
gcc version 2.95.3 20010315 (release)
(Reply) (Thread)
[User Picture]
From:tobotras
Date:December 10th, 2004 07:35 am (UTC)

Re: вот

(Link)
Забавно:

> gcc -v
Reading specs from /usr/lib/gcc-lib/i386-linux/2.95.4/specs
gcc version 2.95.4 20011002 (Debian prerelease)

А печатает фигню. Надо обдумать, от чего это зависит.
(Reply) (Parent) (Thread)
[User Picture]
From:sha90w
Date:December 10th, 2004 07:38 am (UTC)

дауж...

(Link)
mci@drak:~$ ./1
-1.999184
mci@drak:~$ gcc -v
Reading specs from /usr/lib/gcc-lib/i486-linux/3.3.4/specs
Configured with: ../src/configure -v --enable-languages=c,c++,java,f77,pascal,objc,ada,treelang --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --with-gxx-include-dir=/usr/include/c++/3.3 --enable-shared --with-system-zlib --enable-nls --without-included-gettext --enable-__cxa_atexit --enable-clocale=gnu --enable-debug --enable-java-gc=boehm --enable-java-awt=xlib --enable-objc-gc i486-linux
Thread model: posix
gcc version 3.3.4 (Debian 1:3.3.4-13)
(Reply) (Parent) (Thread)
[User Picture]
From:dottedmag
Date:December 10th, 2004 07:51 am (UTC)

Re: вот

(Link)
Наверняка от какого-нибудь выравнивания все зависит. Ведь сначала мы пытаемся double выдать за int, а потом int за float.
(Reply) (Parent) (Thread)
[User Picture]
From:tobotras
Date:December 10th, 2004 07:54 am (UTC)

Re: вот

(Link)
Нету "потом" ;)
(Reply) (Parent) (Thread)
[User Picture]
From:dadcaptain
Date:December 10th, 2004 07:45 am (UTC)

Мелкомягкая шестая студия нолик выдает

(Link)
и не морщится. Без варнингов на компиляции.
(Reply) (Thread)
[User Picture]
From:cvs
Date:December 10th, 2004 10:03 am (UTC)

Re: Мелкомягкая шестая студия нолик выдает

(Link)
у них в пузе подразумеваются прекомпиленные хидеры.
(Reply) (Parent) (Thread)
[User Picture]
From:dottedmag
Date:December 10th, 2004 08:11 am (UTC)
(Link)
Еще более интересный результат:

[mag@vertex:~]$ gcc -Os -fomit-frame-pointer -o 1 1.c
[mag@vertex:~]$ ./1
2.425766
[mag@vertex:~]$ gcc -v
Reading specs from /usr/lib/gcc-lib/i486-linux/3.3.4/specs
Configured with: ../src/configure -v --enable-languages=c,c++,java,f77,pascal,objc,ada,treelang --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --with-gxx-include-dir=/usr/include/c++/3.3 --enable-shared --with-system-zlib --enable-nls --without-included-gettext --enable-__cxa_atexit --enable-clocale=gnu --enable-debug --enable-java-gc=boehm --enable-java-awt=xlib --enable-objc-gc i486-linux
Thread model: posix
gcc version 3.3.4 (Debian 1:3.3.4-13)
(Reply) (Thread)
From:dado
Date:December 10th, 2004 09:27 am (UTC)
(Link)
0.000000
почему.. а почему бы и нет?
(Reply) (Thread)
[User Picture]
From:xfyre
Date:December 10th, 2004 02:38 pm (UTC)
(Link)
2.546433

прикольно
(Reply) (Thread)
[User Picture]
From:msh
Date:December 10th, 2004 08:40 pm (UTC)
(Link)
печатает платформенно-зависимую чушь при выполнении, warning при компиляции, ругательства при code review, настойчивые просьбы не пихать везде FP при design review. В обратном порядке.
(Reply) (Thread)
[User Picture]
From:k001
Date:December 11th, 2004 02:20 am (UTC)
(Link)
У меня, по-моему, самый обалденный результат получился:

[kir@localhost ~]$ ./x
-3251965839102868998727633202116887135572776021213108627481971271454696864907279280040929743863128197238062668554407537734746197632782089588295327196786790703532399515551098493346865941027415604229049653145663552150827762249218412289553075602025329549281843065373504103301926818575526661809075296007094272.000000
[kir@localhost ~]$ gcc -v
Reading specs from /usr/lib/gcc/i386-redhat-linux/3.4.2/specs
Configured with: ../configure --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --enable-shared --enable-threads=posix --disable-checking --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-java-awt=gtk --host=i386-redhat-linux
Thread model: posix
gcc version 3.4.2 20041017 (Red Hat 3.4.2-6.fc3)

На другой машинке

[kir@kir kir]$ ./x
-3007151235843787844031252807118764065651930054663668546624998770611799079827992116741604848640745186527582151292893148837069650258719029242943476438058618969047191363539587059621366466945346038569502176538580861400128657661433195916687609717101092279800097252100111192604091451054682130408251796192493568.000000
[kir@kir kir]$ gcc -v
Reading specs from /usr/lib/gcc-lib/athlon-asplinux-linux/3.3.3/specs
Configured with: ../configure --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --enable-shared --enable-threads=posix --disable-checking --disable-libunwind-exceptions --with-system-zlib --enable-__cxa_atexit --host=athlon-asplinux-linux
Thread model: posix
gcc version 3.3.3 20040216 (Red Hat Linux 3.3.3-2)


На третьей машинке примерно как и у всех:

mmx ~ # ./x
-1.998924
mmx ~ # gcc -v
Reading specs from /usr/lib/gcc-lib/i586-pc-linux-gnu/3.3.4/specs
Configured with: /var/tmp/portage/gcc-3.3.4-r1/work/gcc-3.3.4/configure --prefix=/usr --bindir=/usr/i586-pc-linux-gnu/gcc-bin/3.3 --includedir=/usr/lib/gcc-lib/i586-pc-linux-gnu/3.3.4/include --datadir=/usr/share/gcc-data/i586-pc-linux-gnu/3.3 --mandir=/usr/share/gcc-data/i586-pc-linux-gnu/3.3/man --infodir=/usr/share/gcc-data/i586-pc-linux-gnu/3.3/info --enable-shared --host=i586-pc-linux-gnu --target=i586-pc-linux-gnu --with-system-zlib --enable-languages=c,c++,f77 --enable-threads=posix --enable-long-long --disable-checking --disable-libunwind-exceptions --enable-cstdio=stdio --enable-version-specific-runtime-libs --with-gxx-include-dir=/usr/lib/gcc-lib/i586-pc-linux-gnu/3.3.4/include/g++-v3 --with-local-prefix=/usr/local --enable-shared --enable-nls --without-included-gettext --disable-multilib --enable-__cxa_atexit --enable-clocale=generic
Thread model: posix
gcc version 3.3.4 20040623 (Gentoo Linux 3.3.4-r1, ssp-3.3.2-2, pie-8.7.6)
(Reply) (Thread)