- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
int clearscreen()
{
clrscr();
return 0;
}
void main()
{
char * c;
printf("You typed: %c",
*c,
scanf("%c",c),
printf("Type any simbol: "),
clearscreen());
}
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
−20.2
int clearscreen()
{
clrscr();
return 0;
}
void main()
{
char * c;
printf("You typed: %c",
*c,
scanf("%c",c),
printf("Type any simbol: "),
clearscreen());
}
Страшен язык Си 2
guest 10.01.2009 19:42 # +1
Хм. Один из "хороших вопросов на собеседовании" почему это может работать, почему может не работать, в каких местах содержится неопределённое поведение :)
guest 11.01.2009 00:30 # 0
scanf("%c",c) - мы записываем символ по адресу, который содержится в c..А аллах его знает, что там может быть..
guest 11.01.2009 00:31 # 0
"использование с в кач-ве неопределенного адреса".
guest 14.01.2009 00:31 # 0
Порядок оценивания аргуметов не определён, хотя обычно получается с конца.
Однако, про *с (предполагая, что указатель был бы коррекстно инициализирован) видимо поведение не undefined, а unspecified, т.е. *c будет оценено или до scanf или после, но без сюрпризов. Но для этого должен быть инициализирован не только указатель, но и то, на что он указывает, иначе unspecified переходит в undefined.
guest 09.02.2009 02:45 # −6
только расово-неверные пидарасы используют scanf
guest 03.07.2009 19:41 # +1
эм взываю к Аллаху, чем же пользуются расово-верные пидорасы? вы имеете религиозные предубеждения против scanf? вы предпочитаете считывать прямо из потоков?