Здравствуйте, korzhik, Вы писали:
K>Здравствуйте, fAX, Вы писали:
fAX>>Задание несложное: написать самую короткую программу, которая бы завершалась аварийно
K>Господа, куда приходить за призом?
K>
Здравствуйте, 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акан — это, видимо, фича.
Здравствуйте, korzhik, Вы писали:
K>Здравствуйте, fAX, Вы писали:
fAX>>Задание несложное: написать самую короткую программу, которая бы завершалась аварийно
K>Господа, куда приходить за призом?
"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
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.
Единственная цель этого кода заткнуть линкёр, который сделает неработающий бинарник.
Здравствуйте, korzhik, Вы писали:
K>Приведённый код есть определение глобальной переменной целого типа с именем main. K>Единственная цель этого кода заткнуть линкёр, который сделает неработающий бинарник.
Насчёт этого, Вы, несомненно, правы. Вот кусок листинга, выданного IDA:
Это код CRT, вызывающий "функцию" main, в то время как main является:
.data:00403028 _main db 0 ; CODE XREF: start+13Ep
.data:00403029 db 0
.data:0040302A db 0
.data:0040302B db 0
Что неудивительно, т. к. глобальные переменные обнуляются. То есть происходит обращение по нулевому адресу, что и приводит к аварийному завершению программы.