для программистов, знающих язык це
Mar. 3rd, 2008 11:28 pmЗагадка: написать самую краткую программу на C, которая компилируется, запускается и падает. Под "компилируется" будем для ясности понимать, что "gcc -o example example.c" ее компилирует без ошибок и предупреждений, и создает исполняемый файл example, который при исполнении падает.
Вариант: то же самое, но разрешаются предупреждения при компиляции.
Теперь ответы - это не я придумал, а рассказал Даг Ландауэр (Doug Landauer) во внутренней рассылке, копирую сюда с его разрешения. Поэтому если хотите свой вариант придумать, не заглядывайте под кат:
Вариант без предупреждений: "int main;"
Вариант с предупреждениями: "main;"
Вариант: то же самое, но разрешаются предупреждения при компиляции.
Теперь ответы - это не я придумал, а рассказал Даг Ландауэр (Doug Landauer) во внутренней рассылке, копирую сюда с его разрешения. Поэтому если хотите свой вариант придумать, не заглядывайте под кат:
Вариант без предупреждений: "int main;"
Вариант с предупреждениями: "main;"
no subject
no subject
Date: 2008-03-03 09:52 pm (UTC)вообще, надо бы об опциях договориться
Date: 2008-03-03 09:46 pm (UTC)test2.c:1: warning: ‘main’ is usually a function
(это для первого варианта)
Re: вообще, надо бы об опциях договориться
Date: 2008-03-03 09:48 pm (UTC)no subject
Date: 2008-03-03 09:51 pm (UTC)yes!
красиво.
no subject
Date: 2008-03-03 09:51 pm (UTC)no subject
Date: 2008-03-03 09:53 pm (UTC)no subject
Date: 2008-03-03 09:56 pm (UTC)no subject
Date: 2008-03-03 10:05 pm (UTC)no subject
Date: 2008-03-03 10:06 pm (UTC)C warningом
Date: 2008-03-03 09:58 pm (UTC)Немного подумав
Date: 2008-03-03 11:09 pm (UTC)no subject
Date: 2008-03-03 10:08 pm (UTC)no subject
Date: 2008-03-03 10:14 pm (UTC)это не претензия - просто вспомнилось
no subject
Date: 2008-03-03 10:36 pm (UTC)no subject
Date: 2008-03-03 11:02 pm (UTC)Угу
Date: 2008-03-04 03:06 am (UTC)no subject
Date: 2008-03-03 10:54 pm (UTC)no subject
Date: 2008-03-03 11:01 pm (UTC)no subject
Date: 2008-03-03 11:15 pm (UTC)no subject
Date: 2008-03-03 11:30 pm (UTC)main(int argc,char **argv){
return *argv[argc];
}
Написал, вставил, и увидел первую строчку под катом.
До второй дошел сам. Спасибо, занимательно.
no subject
Date: 2008-03-03 11:33 pm (UTC)сам додумался только до main(){main();}
no subject
Date: 2008-03-04 06:29 am (UTC)no subject
Date: 2008-03-04 07:20 am (UTC)no subject
Date: 2008-03-04 08:36 am (UTC)no subject
Date: 2008-03-04 03:26 pm (UTC)no subject
Date: 2008-03-04 04:42 pm (UTC)no subject
Date: 2008-03-04 05:06 pm (UTC)Может, как-нибудь зациклить компилятор при вычислении константы, которую он обязан вычислить сам?
no subject
Date: 2008-03-04 06:42 pm (UTC)no subject
Date: 2008-03-04 08:45 am (UTC)Большое дерево
Date: 2008-03-04 09:04 am (UTC)template class A1; template class A2; template class A : public A1, A2 { }; template <> class A<0>{}; template class A1: public A { }; template class A2: public A { }; main(int argc, char **argv) { A<16> a; }чтоб виднее было
Date: 2008-03-04 09:25 am (UTC)template< const int N > class A2;
template< const int N > class A : public A1< N-1 >, A2< N-1 > { };
template
<> class A<0>{};
template< const int N > class A1: public A< N > { };
template< const int N > class A2: public A< N > { }; main(int argc, char **argv)
{ A<16> a; }
no subject
Date: 2008-03-04 09:36 am (UTC)и работает :)
no subject
Date: 2008-03-04 10:12 am (UTC)no subject
Date: 2008-03-04 10:24 am (UTC)Не может, глобальные переменные гарантировано инициализируются даже в С++.
no subject
Date: 2008-03-04 10:32 am (UTC)GCC has the ability to warn the user about using the value of a uninitialized variable. Such value is undefined ... (http://gcc.gnu.org/wiki/Better_Uninitialized_Warnings)
no subject
Date: 2008-03-04 11:01 am (UTC)no subject
Date: 2008-03-04 11:09 am (UTC)Я последний раз работал с gcc лет восемь назад, поэтому ручаться за него не стану, но все же отмечу, что по Вашей ссылке ничего не говорится о глобальных переменных (локальные-то и по стандарту не должны инициализироваться автоматически).
no subject
Date: 2008-03-04 07:25 pm (UTC)addb %al,(%eax)/addb %al,(%eax)— шансы на падение велики, но не 100% ;-)), а остальное — зависит от того, что линкер/либс уложит после main. Так что, увы, но данное решение всё-таки непереносимо — может и не упасть.no subject
Date: 2008-03-04 07:40 pm (UTC)no subject
Date: 2008-03-04 07:44 pm (UTC)main()
{
*((int *) 0)=0;
}
gcc4 отказывается компилировать 0[0]=0
no subject
Date: 2008-03-04 07:48 pm (UTC)no subject
Date: 2008-03-05 03:00 pm (UTC)E:\asdf>dir *.cpp Том в устройстве E имеет метку Новый том Серийный номер тома: 607E-527F Содержимое папки E:\asdf 05.03.2008 18:02 0 empty.cpp 1 файлов 0 папок 32 510 574 592 байт свободно E:\asdf>g++ empty.cpp -c > out.exe E:\asdf>out.exe Отказано в доступе. E:\asdf>no subject
Date: 2008-03-06 09:48 pm (UTC)% cat > short.c
X^D
% gcc short.c -o short -DX="int main;"
%