Возник спор с одним товарищем по сабжу. Ранее в VS были проблемы с long long, и с тем, что переменная, объявленная в заголовке цикла for оставалась после выхода из цикла. Сейчас обе проблемы поправлены. Кто какие знает ещё?
Обычно вспоминаешь об этом когда начинаешь работать. А for после выхода из цикла - можно исправить в опциях компилятора : /Za Disables language extensions. Я этим пользовался лишь однажды. С родными заголовочными файлами такой номер не пройдёт, например - перестаёт понимать анонимные вложения в структурах: typedef union _LARGE_INTEGER { struct { DWORD LowPart; LONG HighPart; }; выдаёт D:\DevStudi\VC98\Include\winnt.h(357) : error C2467: illegal declaration of anonymous 'struct' struct { DWORD LowPart; LONG HighPart; } u;
ну а то что если даже объявить функцию void main() и будет все равно вставлена инструкция xor eax,eax перед ret? Т.е. фактически, добалено return 0, несмотря на тип void. Это даже в 2008 есть.
Hexxx Не считаю это косяком. void нужен только для того, чтобы не париться с return. Какая разница что там вернёт main, если после него уже не мы правим балом?
Hexxx пишет: Сказали void - должно быть void. Ну с таким раскладом void говорить было нельзя. По стандарту main() должен возвращать int. Хотя большинство компиляторов и void нормально обрабатывают, некоторые предупреждение выдают. В общем это не косяк, а попытка подвести под стандарт написанный не по стандарту исходник.
Те компилеры, которые warning пишут - это правильные компилеры. А молча впихивать xor eax, eax - это саботаж. Такой же как в Delphi, когда for декрементил счетчик, хотя должен увеличивать.
Hexxx пишет: Такой же как в Delphi, когда for декрементил счетчик, хотя должен увеличивать. Такой саботаж во многих сишных компиляторах есть, зовётся оптимизация Для кода for(i=0;i<100;i++) {} если в теле цикла счётчик не используется, будет сгенерирован декремент до нуля. На х86 это просто оптимальнее в плане быстродействия. Компилятор же не должен буквально код транслировать в машинный. Так можно сказать и какого это фига он циклы разворачивает ;)
ntldr пишет: Значение в eax после возврата void не определено +1
Я только одного не пойму. Зачем топикстартеру это? Ну баги по-любому будут всегда, пока функционал растёт, хотя в таком серьёзном продукте как VS любые даже очень маленькие баги находят быстро.