Здравствуйте, migel, Вы писали:
M>Это что получается у VB область активации локальной переменной ограничена методом но ни как ни блоком M>"...поубывав бы гхадовь..."
Да... лучше тогда помахать VB .NET ручкой.... пока не пофиксят
Здравствуйте, Alexey Shirshov, Вы писали:
AS>Нет идей. Почему?
"Оптимизация", блин. Компилятор вытаскивает все объявления WCHAR buf[1024] наружу и складывает их в общую кучу (почему-то напрочь забывая про их реальный scope). При это размер резервируемой на стеке памяти в моем случае раздувается примерно до 180kb (против правильной цифры в районе 20-30). Попытка зарезервировать такой кусок на стеке внутри try/catch вызывает STACK OVERFLOW. Идиотизм, да и только.
Здравствуйте, AndrewVK, Вы писали:
AVK>Здравствуйте, Alexey Shirshov, Вы писали:
AS>>Не перестаю удивляться крутым парням из MS AS>>
AS>> Dim ii As Integer = 0
AS>> Do
AS>> Dim j As Integer
AS>> Console.WriteLine(j)
AS>> j = 10
AS>> ii += 1
AS>> Loop While ii < 3
AS>>
AS>>Кто угадает какой будет вывод?
AVK>Аналог на шарпе просто не скомпилируется.
ага на шарпе будет:
Use of unassigned local variable 'j'
васик просто на это забивает
всетаки корректнее было бы написать Dim j As Integer = 0, и будет все нормально — три нуля
ведь дали же такую возможность, и для особо одаренных сказали что не очень корректно объявлять переменную без иницилизации, но можно
Здравствуйте, Alexey Shirshov, Вы писали:
G>>0, 10, 10
AS>Но почему?
AS> Dim ii As Integer = 0
AS> Do
AS> Dim j As Integer
AS> Console.WriteLine(j)
AS> j = 10
AS> ii += 1
AS> Loop While ii < 3
На первой итерации цикла переменной j не существует, она создаётся и ей по умолчанию присваивается 0. После WriteLine j получает значение 10.
На второй итерации цикла переменная j уже существует, и поэтому инструкция "Dim j As Integer" ничего не делает.
То же самое на третьей итерации.