Самая короткая "падающая" программа на C
От: fAX Израиль  
Дата: 07.11.04 20:05
Оценка:
Задание несложное: написать самую короткую программу, которая бы завершалась аварийно
...Complex problems have simple, easy-to-understand wrong answers...
(Grossman's Misquote of H.L.Mencken)
Re: Самая короткая "падающая" программа на C
От: Draqon  
Дата: 07.11.04 20:21
Оценка:
Здравствуйте, fAX, Вы писали:

fAX>Задание несложное: написать самую короткую программу, которая бы завершалась аварийно


int main()
{
   int i = 1/0;
}
Re: Самая короткая "падающая" программа на C
От: King Oleg Украина http://kingoleg.livejournal.com
Дата: 07.11.04 20:23
Оценка:
Здравствуйте, fAX, Вы писали:

fAX>Задание несложное: написать самую короткую программу, которая бы завершалась аварийно

Она должна компилироваться?
King Oleg
*Читайте DOC'и, они rules*
Re[2]: Самая короткая "падающая" программа на C
От: fAX Израиль  
Дата: 07.11.04 20:24
Оценка:
Здравствуйте, King Oleg, Вы писали:

KO>Здравствуйте, fAX, Вы писали:


fAX>>Задание несложное: написать самую короткую программу, которая бы завершалась аварийно

KO>Она должна компилироваться?
Безусловно!
...Complex problems have simple, easy-to-understand wrong answers...
(Grossman's Misquote of H.L.Mencken)
Re[2]: Самая короткая "падающая" программа на C
От: fAX Израиль  
Дата: 07.11.04 20:25
Оценка:
Здравствуйте, Draqon, Вы писали:

D>Здравствуйте, fAX, Вы писали:


fAX>>Задание несложное: написать самую короткую программу, которая бы завершалась аварийно


D>
D>int main()
D>{
D>   int i = 1/0;
D>}
D>

Ужас! Целых 30 символов!!!
...Complex problems have simple, easy-to-understand wrong answers...
(Grossman's Misquote of H.L.Mencken)
Re: Самая короткая "падающая" программа на C
От: korzhik Россия  
Дата: 07.11.04 20:31
Оценка: 1 (1)
Здравствуйте, fAX, Вы писали:

fAX>Задание несложное: написать самую короткую программу, которая бы завершалась аварийно


main(){main();}


15 символов
Re[2]: Самая короткая "падающая" программа на C
От: korzhik Россия  
Дата: 07.11.04 20:34
Оценка:
Здравствуйте, korzhik, Вы писали:

fAX>>Задание несложное: написать самую короткую программу, которая бы завершалась аварийно


K>
K>main(){main();}
K>

K>15 символов

ну наверно это нелегально с точки зрения стандарта C,
ну пусть так:
int main(){main();}

19 символов
Re[3]: Самая короткая "падающая" программа на C
От: Neo09 Россия  
Дата: 07.11.04 21:41
Оценка:
Здравствуйте, fAX, Вы писали:

fAX>Здравствуйте, Draqon, Вы писали:


D>>Здравствуйте, fAX, Вы писали:


fAX>>>Задание несложное: написать самую короткую программу, которая бы завершалась аварийно


D>>
D>>int main()
D>>{
D>>   int i = 1/0;
D>>}
D>>

fAX>Ужас! Целых 30 символов!!!

А так:
int main(){1/0;}

16. Чужую идею украл
Re: Самая короткая "падающая" программа на C
От: BlackHeretic Израиль  
Дата: 08.11.04 07:43
Оценка: :)
Здравствуйте, fAX, Вы писали:

fAX>Задание несложное: написать самую короткую программу, которая бы завершалась аварийно


27 символов

int main(int i){1/main(0);}
ICQ 156156278
Re[4]: Самая короткая "падающая" программа на C
От: BlackHeretic Израиль  
Дата: 08.11.04 07:44
Оценка:
Здравствуйте, Neo09, Вы писали:

N>Здравствуйте, fAX, Вы писали:


fAX>>Здравствуйте, Draqon, Вы писали:


D>>>Здравствуйте, fAX, Вы писали:


fAX>>>>Задание несложное: написать самую короткую программу, которая бы завершалась аварийно


D>>>
D>>>int main()
D>>>{
D>>>   int i = 1/0;
D>>>}
D>>>

fAX>>Ужас! Целых 30 символов!!!

N>А так:

N>
N>int main(){1/0;}
N>

N>16. Чужую идею украл

Не скомпилится
ICQ 156156278
Re[3]: Самая короткая "падающая" программа на C
От: BlackHeretic Израиль  
Дата: 08.11.04 07:45
Оценка:
Здравствуйте, korzhik, Вы писали:

K>Здравствуйте, korzhik, Вы писали:


fAX>>>Задание несложное: написать самую короткую программу, которая бы завершалась аварийно


K>>
K>>main(){main();}
K>>

K>>15 символов

K>ну наверно это нелегально с точки зрения стандарта C,

K>ну пусть так:
K>
K>int main(){main();}
K>

K>19 символов

Тогда return нужен
А вот если void вместо int то наверное короче уже некуда
ICQ 156156278
Re[3]: Самая короткая "падающая" программа на C
От: Кодт Россия  
Дата: 08.11.04 09:51
Оценка:
Здравствуйте, korzhik, Вы писали:

K>>
K>>main(){main();}
K>>

K>>15 символов

K>ну наверно это нелегально с точки зрения стандарта C,


Это по-любому нелегально: функцию main нельзя вызывать рекурсивно. Где-то в Стандарте на этот счёт сказано.

Более подходяще было бы
main(){abort();}
Перекуём баги на фичи!
Re[4]: Самая короткая "падающая" программа на C
От: Аноним  
Дата: 08.11.04 10:07
Оценка:
Здравствуйте, Кодт, Вы писали:

>Это по-любому нелегально: функцию main нельзя вызывать рекурсивно. Где-то в Стандарте на этот счёт сказано.


если не изменяет память, в C, в отличие от C++ как раз можно вызывать функцию main рекурсивно.
Люди, у кого есть C99 посмотрите пожалуйста.
Re: Самая короткая "падающая" программа на C
От: 0xFADE США github.com/NotImplemented
Дата: 08.11.04 10:13
Оценка:
Здравствуйте, fAX, Вы писали:

fAX>Задание несложное: написать самую короткую программу, которая бы завершалась аварийно

int main {*((void *)0);}
Re[5]: Самая короткая "падающая" программа на C
От: korzhik Россия  
Дата: 08.11.04 10:17
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте, Кодт, Вы писали:


>>Это по-любому нелегально: функцию main нельзя вызывать рекурсивно. Где-то в Стандарте на этот счёт сказано.


А>если не изменяет память, в C, в отличие от C++ как раз можно вызывать функцию main рекурсивно.

А>Люди, у кого есть C99 посмотрите пожалуйста.

анонимом был я
Re[4]: Самая короткая "падающая" программа на C
От: korzhik Россия  
Дата: 08.11.04 10:34
Оценка:
Здравствуйте, BlackHeretic, Вы писали:

BH>Здравствуйте, korzhik, Вы писали:

K>>ну наверно это нелегально с точки зрения стандарта C,
K>>ну пусть так:
K>>
K>>int main(){main();}
K>>

K>>19 символов
BH>Тогда return нужен
BH>А вот если void вместо int то наверное короче уже некуда

void вроде нельзя по стандарту
Comeau в режиме C99 вариант с void не скомпилил,
а вот вариант с int и без return скомилил даже без варнингов.
Re: Самая короткая "падающая" программа на C
От: niks3  
Дата: 08.11.04 10:38
Оценка:
Здравствуйте, fAX, Вы писали:

fAX>Задание несложное: написать самую короткую программу, которая бы завершалась аварийно


main(){int i;i=1/(i-i);}
Re[4]: Самая короткая "падающая" программа на C
От: niks3  
Дата: 08.11.04 10:41
Оценка:
Здравствуйте, Кодт, Вы писали:

К>Здравствуйте, korzhik, Вы писали:


K>>>
K>>>main(){main();}
K>>>

K>>>15 символов

K>>ну наверно это нелегально с точки зрения стандарта C,


К>Это по-любому нелегально: функцию main нельзя вызывать рекурсивно. Где-то в Стандарте на этот счёт сказано.


К>Более подходяще было бы

К>
main(){abort();}


main(){main();} — скомпилировалось в VC7.1 и вызвало stack overflow
Re[5]: Самая короткая "падающая" программа на C
От: korzhik Россия  
Дата: 08.11.04 12:07
Оценка:
Здравствуйте, Аноним, Вы писали:

А>если не изменяет память, в C, в отличие от C++ как раз можно вызывать функцию main рекурсивно.

А>Люди, у кого есть C99 посмотрите пожалуйста.
скачал я себе C99, так что вот:

C99 6.5.2.2#11:

Recursive function calls shall be permitted, both directly
and indirectly through any chain of other functions.

Никаких исключений для функции main здесь не делается.
Хотя в C++ рекурсивный вызов функции main ведёт (насколько я помню) к undefined behavior, в C99 это well defined.

Как я понял return обязателен, так что окончательный вариант полностью соответствующий стандарту C99 такой:
int main(void){main();return 0;}

32 символа
Re: Самая короткая "падающая" программа на C
От: korzhik Россия  
Дата: 08.11.04 12:10
Оценка: 149 (16)
Здравствуйте, fAX, Вы писали:

fAX>Задание несложное: написать самую короткую программу, которая бы завершалась аварийно


Господа, куда приходить за призом?

int main;

9 символов
Re[5]: Самая короткая "падающая" программа на C
От: Neo09 Россия  
Дата: 08.11.04 12:32
Оценка:
Здравствуйте, BlackHeretic, Вы писали:

N>>
N>>int main(){1/0;}
N>>


BH>Не скомпилится


Компилится. Только почему-то деление на ноль не вызывает.
Это тоже не вызывает деление на ноль:
int main(){int i=1/0;}

А вот так пожалуйста:
int main(){int i=1/i;}
Re[2]: Самая короткая "падающая" программа на C
От: fAX Израиль  
Дата: 08.11.04 12:33
Оценка:
Здравствуйте, korzhik, Вы писали:

K>Господа, куда приходить за призом?

+15

K>
K>int main;
K>

K>9 символов
...Complex problems have simple, easy-to-understand wrong answers...
(Grossman's Misquote of H.L.Mencken)
Re[2]: Самая короткая "падающая" программа на C
От: Neo09 Россия  
Дата: 08.11.04 12:34
Оценка:
Здравствуйте, korzhik, Вы писали:

K>Здравствуйте, fAX, Вы писали:


fAX>>Задание несложное: написать самую короткую программу, которая бы завершалась аварийно


K>Господа, куда приходить за призом?


K>
K>int main;
K>

K>9 символов

cупер
Re[3]: Самая короткая "падающая" программа на C
От: fAX Израиль  
Дата: 08.11.04 12:44
Оценка:
Здравствуйте, Neo09, Вы писали:

K>>
K>>int main;
K>>

K>>9 символов

N>cупер

Когда мне рассказали эту задачу с похожим решением, она мне очень приглянулась

Ещё один "грязный трюк":
a


gcc -D'a=main;' ...

Но сути это не меняет!
...Complex problems have simple, easy-to-understand wrong answers...
(Grossman's Misquote of H.L.Mencken)
Re[6]: Самая короткая "падающая" программа на C
От: Кодт Россия  
Дата: 08.11.04 13:26
Оценка:
Здравствуйте, korzhik, Вы писали:

K>Как я понял return обязателен, так что окончательный вариант полностью соответствующий стандарту C99 такой:

K>
K>int main(void){main();return 0;}
K>

K>32 символа

Ещё короче:
int main(void){return main();}

31 символ
Перекуём баги на фичи!
Re[2]: Линкер ругается
От: Mr.ToNik Россия http://sinstr.ru
Дата: 08.11.04 17:03
Оценка:
Здравствуйте, korzhik, Вы писали:

K>Здравствуйте, fAX, Вы писали:


fAX>>Задание несложное: написать самую короткую программу, которая бы завершалась аварийно


K>Господа, куда приходить за призом?


K>
K>int main;
K>

mini error LNK2019: unresolved external symbol _main referenced in function _mainCRTStartup
mini fatal error LNK1120: 1 unresolved externals


K>9 символов
Сделать человеку приятное очень просто. Не сделайте ему гадость и ему будет приятно!
Баг — это клоп. Таpакан — это, видимо, фича.
Re[3]: Линкер ругается
От: korzhik Россия  
Дата: 08.11.04 17:08
Оценка:
Здравствуйте, Mr.ToNik, Вы писали:

K>>
K>>int main;
K>>

MT>
MT>mini error LNK2019: unresolved external symbol _main referenced in function _mainCRTStartup
MT>mini fatal error LNK1120: 1 unresolved externals
MT>


Compile as C Code (/TC) стоит?
Re[2]: Самая короткая "падающая" программа на C
От: peterbes Россия  
Дата: 08.11.04 17:11
Оценка:
Здравствуйте, korzhik, Вы писали:

K>Здравствуйте, fAX, Вы писали:


fAX>>Задание несложное: написать самую короткую программу, которая бы завершалась аварийно


K>Господа, куда приходить за призом?


да ....
Re[4]: Линкер ругается
От: Mr.ToNik Россия http://sinstr.ru
Дата: 08.11.04 18:52
Оценка:
Здравствуйте, korzhik, Вы писали:

K>Здравствуйте, Mr.ToNik, Вы писали:


K>>>
K>>>int main;
K>>>

MT>>
MT>>mini error LNK2019: unresolved external symbol _main referenced in function _mainCRTStartup
MT>>mini fatal error LNK1120: 1 unresolved externals
MT>>


K>Compile as C Code (/TC) стоит?


Был неправ, каюсь.
Сделать человеку приятное очень просто. Не сделайте ему гадость и ему будет приятно!
Баг — это клоп. Таpакан — это, видимо, фича.
Re[2]: Самая короткая "падающая" программа на C
От: Olegator  
Дата: 08.11.04 18:59
Оценка:
Здравствуйте, korzhik, Вы писали:

K>Господа, куда приходить за призом?


Не торопись:

main;


5 символов.

С уважением,
Olegator
... << Rsdn@Home 1.1.4 beta 1 >>
Re[3]: Самая короткая "падающая" программа на C
От: korzhik Россия  
Дата: 08.11.04 19:06
Оценка:
Здравствуйте, Olegator, Вы писали:

O>
O>main;
O>

O>5 символов.

MODE:strict errors C99

"ComeauTest.c", line 1: error: this declaration has no storage class or type
specifier, Wild guess: Should this be in a function block?
Wild Guess: You're using export but not using Comeau C++ 4.3.x
main;
^
1 error detected in the compilation of "ComeauTest.c".
In strict mode, with -tused, Compile failed


хотя VC7.1 скомпилир и слинковал
молодец хоть что выдал предупреждение:

: warning C4218: nonstandard extension used : must specify at least a storage class or a type

Re[6]: Самая короткая "падающая" программа на C
От: grigsv  
Дата: 09.11.04 07:23
Оценка:
Здравствуйте, Neo09, Вы писали:

N>Здравствуйте, BlackHeretic, Вы писали:


N>>>
N>>>int main(){1/0;}
N>>>


BH>>Не скомпилится


N>Компилится. Только почему-то деление на ноль не вызывает.

N>Это тоже не вызывает деление на ноль:
N>
N>int main(){int i=1/0;}
N>

N>А вот так пожалуйста:
N>
N>int main(){int i=1/i;}
N>

А оптимизатор отключили?
Тогда уж лучше
N>
N>int main(){return 1/i;}
N>
Re[3]: Самая короткая "падающая" программа на C
От: Olegator  
Дата: 09.11.04 08:35
Оценка:
Здравствуйте, Olegator, Вы писали:

O>5 символов.


А ещё можно ужать до двух символов:

f;

Правда, только указав опцию линкера /ENTRY:f


С уважением,
Olegator
... << Rsdn@Home 1.1.4 beta 1 >>
Re[4]: Самая короткая "падающая" программа на C
От: Olegator  
Дата: 09.11.04 09:02
Оценка:
Здравствуйте, korzhik, Вы писали:

K>хотя VC7.1 скомпилир и слинковал

K>молодец хоть что выдал предупреждение:
K>

K>: warning C4218: nonstandard extension used : must specify at least a storage class or a type


Хм... У меня VC 7.1 никак не ругается. Да вроде в языке C тип возвращаемого значения функции, объявленной без указания такового, по умолчанию -- int.

P.S. И GCC компилит, только тоже выдаёт warning.

С уважением,
Olegator
... << Rsdn@Home 1.1.4 beta 1 >>
Re[5]: Самая короткая "падающая" программа на C
От: korzhik Россия  
Дата: 09.11.04 09:22
Оценка:
Здравствуйте, Olegator, Вы писали:

K>>

K>>: warning C4218: nonstandard extension used : must specify at least a storage class or a type

O>Хм... У меня VC 7.1 никак не ругается.
а ты поставь 4-й уровень предупреждений.

>Да вроде в языке C тип возвращаемого значения функции, объявленной без указания такового, по умолчанию -- int.

в С99 помоему не так.
но даже если так, то это здесь не причём.
Код:
main;

скомпилированный VC7.1 с ключом Ze (стоит по умолчанию), то есть с включёнными расширениями
Microsoft, эквивалентен следующему:
int main;

то есть мы можем определить переменную без указания типа
тип подставится автоматически и является типом int.

Приведённый код есть определение глобальной переменной целого типа с именем main.
Единственная цель этого кода заткнуть линкёр, который сделает неработающий бинарник.
Re[6]: Самая короткая "падающая" программа на C
От: Olegator  
Дата: 09.11.04 10:56
Оценка: 1 (1)
Здравствуйте, korzhik, Вы писали:

K>Приведённый код есть определение глобальной переменной целого типа с именем main.

K>Единственная цель этого кода заткнуть линкёр, который сделает неработающий бинарник.

Насчёт этого, Вы, несомненно, правы. Вот кусок листинга, выданного IDA:

.text:0040111B                 push    offset unk_403004
.text:00401120                 push    offset unk_403000
.text:00401125                 call    _initterm
.text:0040112A                 call    ds:__p___initenv
.text:00401130                 mov     ecx, [ebp-20h]
.text:00401133                 mov     [eax], ecx
.text:00401135                 push    dword ptr [ebp-20h]
.text:00401138                 push    dword ptr [ebp-28h]
.text:0040113B                 push    dword ptr [ebp-2Ch]
.text:0040113E                 call    near ptr _main
.text:00401143                 add     esp, 14h
.text:00401146                 mov     esi, eax
.text:00401148                 mov     [ebp-38h], esi
.text:0040114B                 cmp     [ebp-1Ch], edi
.text:0040114E                 jnz     short loc_401157
.text:00401150                 push    esi             ; int
.text:00401151                 call    ds:exit


Это код CRT, вызывающий "функцию" main, в то время как main является:

.data:00403028 _main           db    0                 ; CODE XREF: start+13Ep
.data:00403029                 db    0
.data:0040302A                 db    0
.data:0040302B                 db    0


Что неудивительно, т. к. глобальные переменные обнуляются. То есть происходит обращение по нулевому адресу, что и приводит к аварийному завершению программы.

С уважением,
Olegator
... << Rsdn@Home 1.1.4 beta 1 >>
Re[6]: Самая короткая "падающая" программа на C
От: Тёма29  
Дата: 15.11.04 17:57
Оценка: 12 (1) :))) :))) :)))
Ну, тут уже были программы, валящиеся на этапе выполнения, валящиеся на этапе компиляции, а вот программа валящаяся на этапе написания:

ma

Всё. Завалилась
Re: Самая короткая "падающая" программа на C
От: XopoSHiy Россия http://cleancodegame.github.io/
Дата: 16.11.04 06:50
Оценка: 14 (3) +1 :))) :)))
Здравствуйте, fAX, Вы писали:

fAX>Задание несложное: написать самую короткую программу, которая бы завершалась аварийно


Когда победитель уже известен, я опять влезу со своим Перлом.

die

Итого всего 3 символа!
Сразу видно — Перл — это крайне логичный и правильный язык
И программы на нём получаются короче
---
http://twitter.com/xoposhiy
http://xoposhiy.moikrug.ru
Re[2]: Самая короткая "падающая" программа на C
От: little_alex  
Дата: 17.11.04 15:06
Оценка: +1 :)
Здравствуйте, XopoSHiy, Вы писали:



XSH>Когда победитель уже известен, я опять влезу со своим Перлом.


XSH>
XSH>die
XSH>

XSH>Итого всего 3 символа!
XSH>Сразу видно — Перл — это крайне логичный и правильный язык
XSH>И программы на нём получаются короче

Особенно те которые завершаются аварийно
PS.Я сам против Perl ничего не имею
Re[2]: Самая короткая "падающая" программа на C
От: Блудов Павел Россия  
Дата: 17.11.04 18:05
Оценка:
Здравствуйте, XopoSHiy, Вы писали:

XSH>Когда победитель уже известен, я опять влезу со своим Перлом.


XSH>
XSH>die
XSH>

XSH>Итого всего 3 символа!

Ух ты! В Перле есть встроенная команда аварийного завершения?
Буду знать
... << RSDN@Home 1.1.4 beta 2 >>
Re[2]: Самая короткая "падающая" программа на C
От: Astaroth Россия  
Дата: 23.11.04 08:41
Оценка:
Здравствуйте, korzhik, Вы писали:

K>
K>int main;
K>

K>9 символов

main;


5 символов.
Неявный инт не приветствуется, но компилерами всё так же поддерживается

C:\src>gcc -v
Reading specs from c:/MinGW/bin/../lib/gcc-lib/mingw32/3.2/specs
Configured with: ../gcc/configure --with-gcc --with-gnu-ld --with-gnu-as --host=
mingw32 --target=mingw32 --prefix=/mingw --enable-threads --disable-nls --enable
-languages=f77,c++,objc,ada --disable-win32-registry --disable-shared
Thread model: win32
gcc version 3.2 (mingw special 20020817-1)

C:\src>gcc p.c
p.c:1: warning: data definition has no type or storage class
p.c:1:6: warning: no newline at end of file

C:\src>a.exe (падаем)

C:\src>
WinAmp играет: (умолк пока)
http://livejournal.com/users/breqwas
Re: Самая короткая "падающая" программа на C
От: Astaroth Россия  
Дата: 23.11.04 08:41
Оценка:
Здравствуйте, fAX, Вы писали:

fAX>Задание несложное: написать самую короткую программу, которая бы завершалась аварийно


В конкурсе на самую длинную, видимо, выиграл Windows XP...
Хотя он не на С
WinAmp играет: (умолк пока)
http://livejournal.com/users/breqwas
Re[6]: Самая короткая "падающая" программа на C
От: dimitry_dimitry  
Дата: 29.11.04 14:34
Оценка:
Здравствуйте, Neo09, Вы писали:

N>Здравствуйте, BlackHeretic, Вы писали:


N>>>
N>>>int main(){1/0;}
N>>>


BH>>Не скомпилится


а зачем инт??


N>Компилится. Только почему-то деление на ноль не вызывает.

N>Это тоже не вызывает деление на ноль:
N>
N>int main(){int i=1/0;}
N>

N>А вот так пожалуйста:
N>
N>int main(){int i=1/i;}
N>
... << RSDN@Home 1.1.4 beta 3 rev. 185>>
Re: Самая короткая "падающая" программа на C
От: greenya Украина  
Дата: 06.12.04 09:54
Оценка: :))) :))) :)
Здравствуйте, fAX, Вы писали:

fAX>Задание несложное: написать самую короткую программу, которая бы завершалась аварийно


main(){_asm popa;}

18 bytes
со смыслом
Re[2]: Самая короткая "падающая" программа на C
От: NVadim  
Дата: 07.12.04 16:06
Оценка:
Здравствуйте, korzhik, Вы писали:

K>Здравствуйте, fAX, Вы писали:


fAX>>Задание несложное: написать самую короткую программу, которая бы завершалась аварийно


int main() {

while(true) fork();
}

запускать под рутом — завершает аварийно не только программу
(юниксовый вызов )
Re[2]: Самая короткая "падающая" программа на C
От: Олег Гашев
Дата: 12.12.04 22:32
Оценка:
Здравствуйте, XopoSHiy, Вы писали:

XSH>
XSH>die
XSH>

XSH>Итого всего 3 символа!
XSH>Сразу видно — Перл — это крайне логичный и правильный язык
XSH>И программы на нём получаются короче

echo / | perl
Либо я найду путь, либо проложу его. © Свифт
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.