Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Офф-топ

Страница: 1 | 2 |

 

  Вопрос: Выбор среды разработки программ на C++ Добавлено: 24.02.07 14:40  

Автор вопроса:  Серёга | Web-сайт: houselab.narod.ru | ICQ: 262809473 

Ответить

  Ответы Всего ответов: 23  

Номер ответа: 16
Автор ответа:
 Sharp


Лидер форума

ICQ: 216865379 

Вопросов: 106
Ответов: 9979
 Web-сайт: sharpc.livejournal.com
 Профиль | | #16
Добавлено: 28.02.07 22:11
Разумеется, по дефолту должен стоять последний стандарт, т.к. он перекрывает предыдущий. gcc extensions штука, бесспорно, мерзкая, и тем, кто их придумал, надо оторвать головы, но, по крайней мере, код, написанный в соответствии со стандартом, будет им верно скомпилирован.

Ответить

Номер ответа: 17
Автор ответа:
 GSerg



Вопросов: 0
Ответов: 1876


 Профиль | | #17 Добавлено: 01.03.07 04:53
MSDN к стандарту C++ не имеет никакого отношения. В стандарте ничего про ключи компилятора не написано. Компилятор, соответствующий стандарту, должен ему соответствовать по умолчанию, а не предлагать искать какие-то ключи в MSDN, чтобы начать ему соответствовать.

Ты не понял :)
В MSDN не приводится стандарт, в MSDN приводится выдержка из стандарта:
The C++ standard says that a variable declared in a for loop shall go out of scope after the for loop ends.
И компилятор C++ по умолчанию этому стандарту соответствует. А вот чтобы разрешить повторное объявление i в следующем цикле, надо искать ключи компилятора.

Ответить

Номер ответа: 18
Автор ответа:
 Sharp


Лидер форума

ICQ: 216865379 

Вопросов: 106
Ответов: 9979
 Web-сайт: sharpc.livejournal.com
 Профиль | | #18
Добавлено: 01.03.07 15:07
Для того, чтобы узнать, что думает стандарт, надо смотреть в стандарт, а не в MSDN. Standard C++ - ISO-IEC 14882-1998, пункт 3.3.2.4. Переменная, объявленная в цикле for, должна быть видна только в этом цикле. Все остальное - нарушение стандарта.

Ответить

Номер ответа: 19
Автор ответа:
 GSerg



Вопросов: 0
Ответов: 1876


 Профиль | | #19 Добавлено: 01.03.07 21:25
Перерыв пол-инета, таки нашёл, где скачать этот доступный только за деньги стандарт :)

776 страниц в pdf, нехило, да, смотрим пункт 3.3.2.4:

Names declared in the for-init-statement, and in the condition of the if, while, for, and switch statements are local to the if, while, for, or switch statement (including the controlled statement), and shall not be redeclared in subsequent condition of that statement nor in the outermost block (or, for the if statement, any of the outermost blocks) of the controlled statement; see 6.4.

Переменная признаётся локальной по отношению к блоку, да, обращаться к ней за пределами блока нельзя, да, но при этом всём переобъявлять её вне блока тоже нельзя (выделено жирным).

Фыфот: VC6 рулит :)

Ответить

Номер ответа: 20
Автор ответа:
 Sharp


Лидер форума

ICQ: 216865379 

Вопросов: 106
Ответов: 9979
 Web-сайт: sharpc.livejournal.com
 Профиль | | #20
Добавлено: 01.03.07 21:45
Names declared in the for-init-statement, and in the condition of the if, while, for, and switch statements are local to the if, while, for, or switch statement (including the controlled statement), and shall not be redeclared in subsequent condition of that statement nor in the outermost block (or, for the if statement, any of the outermost blocks) of the controlled statement; see 6.4.

Ответить

Номер ответа: 21
Автор ответа:
 Sharp


Лидер форума

ICQ: 216865379 

Вопросов: 106
Ответов: 9979
 Web-сайт: sharpc.livejournal.com
 Профиль | | #21
Добавлено: 01.03.07 21:50
А, да, вывод: VC6 сосет :)

Ответить

Номер ответа: 22
Автор ответа:
 GSerg



Вопросов: 0
Ответов: 1876


 Профиль | | #22 Добавлено: 01.03.07 22:28
Гы гы гы :)

Почему-то (сейчас не знаю почему) под словами go out of scope мне нарисовалась ситуация, когда переменная выходит за пределы блока и продолжает спокойно жить :) В то время как это общепринятый оборот, обозначающий уничтожение переменной в связи с достижением границ блока :)
Причём! Именно это и написано в оригинальной цитате из MSDN - там правильно говорится, что стандарт требует, чтобы переменная go out of scope, т.е. сдохла, а не вышла на прогулку, как показалось мне :) И статья KB167748 (и как раз её я пропустил, а смотрел другую) как раз объясняет, что это происходит, когда включены расширения компилятора, и показывает, как их отключить :)

Вывод:
- в MSDN стандарт приведён правильно (и нефиг говорить, что туда не надо ходить за стандартом) :)
- VC6 рулит, ибо и имеет полезные расширения синтаксиса C++, и позволяет отключить их (Project, Settings, and then click the C/C++ Tab. Change the Category to Customize and select Disable Language Extensions)

Ответить

Номер ответа: 23
Автор ответа:
 Sharp


Лидер форума

ICQ: 216865379 

Вопросов: 106
Ответов: 9979
 Web-сайт: sharpc.livejournal.com
 Профиль | | #23
Добавлено: 01.03.07 22:32
Рулить VC начал, когда научился грамотно компилить темплейты. Расширение синтаксиса != нарушение стандарта. gcc extensions - это расширение, а вот неверная компиляция переменных, объявленных в цикле - это нарушение.
В MSDN стандарта вообще нет, а только кое-где приведены фразы, имеющие к нему более-менее прямое отношение.

Ответить

Страница: 1 | 2 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам