- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
void foo()
{
int i;
if(0 == i)
{
printf("foo\n");
}
if(0 != i)
{
printf("bar\n");
}
}
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
−45
void foo()
{
int i;
if(0 == i)
{
printf("foo\n");
}
if(0 != i)
{
printf("bar\n");
}
}
https://godbolt.org/g/TL7tTW
Ясно
inkanus-gray 13.01.2017 21:55 # +4
Vindicar 13.01.2017 22:00 # +7
guest 13.01.2017 23:54 # 0
Dr_Stertor 14.01.2017 00:27 # 0
barop 14.01.2017 00:33 # +1
Ну типа будет у тебя там 0x42, и пусть будет, да?
Dr_Stertor 14.01.2017 00:35 # 0
barop 14.01.2017 00:43 # +5
На вот, почитай: http://stackoverflow.com/questions/11962457/why-is-using-an-uninitialized-variable-undefined-behavior-in-c
Psionic 14.01.2017 10:36 # −2
guest 31.01.2017 08:38 # −2
defecate-plusplus 31.01.2017 09:20 # 0
barop 13.01.2017 22:03 # +1
bormand 14.01.2017 21:52 # +2
guest 13.01.2017 23:52 # +2
barop 13.01.2017 23:53 # +2
именно потому умничнка GCC выпилил весь код к хуям
guest 14.01.2017 00:56 # 0
j123123 14.01.2017 12:58 # +2
Vindicar 14.01.2017 08:58 # +1
guest 14.01.2017 15:32 # +5
guestinho 14.01.2017 15:47 # +1
barop 14.01.2017 16:14 # +1
И причем тут физическая память?
bormand 15.01.2017 11:30 # +2
Никто не имеет права спорить со священным Стандартом?
bormand 14.01.2017 21:26 # +1
А компилятор и не обязан размещать переменную в физической памяти. Часть переменных в регистры падает, часть - вообще отбрасывается.
dxd 14.01.2017 21:44 # +1
barop 14.01.2017 22:25 # 0
Он юзерспайс программа
bormand 14.01.2017 22:29 # +1
Так что нехуй тут к словам придираться.
barop 14.01.2017 22:38 # 0
bormand 15.01.2017 11:38 # 0
Конпелятор удаляет код не потому что результат не используется, а из-за того, что эта ветка в графе управления зашкварена UB'ом. Конпелятор считает, что программист - няша, который UB'ов не допускает. Поэтому эта ветка недостижима и её можно выкинуть.
DlangGovno 15.01.2017 12:05 # +1
'the special undefined value u is introduced as the
result of erroneous computations, such as reading from an
uninitialized memory location as a replacement of an arbi-
trary constant value. This special value propagates through
every assignment and arithmetic operation'
Конпелятор может принять это u за любое значение, удобное в данный конкретный момент, даже разное в разных местах.
http://plv.mpi-sws.org/llvmcs/paper.pdf
Еще пишут, что можно получить такое u если он задетектит незащещенное атомиками чтение/запись из разных потоков, но заабузить это не удалось и не уверен, что это вообще заимплеменчено.
GravatarGovno 21.07.2021 00:14 # 0
dxd 15.01.2017 17:32 # +1
Можно даже с опциями типа перечня UB.
TheCalligrapher 07.03.2017 01:57 # +2
Antervis 15.01.2017 12:43 # +1
bormand 15.01.2017 12:50 # 0
guest 07.03.2017 02:06 # 0
bayan 07.03.2017 02:10 # 0
в сях ты сам следишь за такими вещами
хотя я и не могу понять зачем оно может быть нужно.