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 >>
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.