Здравствуйте, SSN75, Вы писали:
SSN>Добрый день! SSN>Кто-нибудь может рассказать как в VC++ 2005 заставить работать код
SSN>уж очень надаело объявлять переменные в начале функции, типа:
Ну формально Project -> Properties -> Configuration properties -> C/C++ -> Language -> Force Conformance In For Loop Scope = No
Но это не дело
С тех пор стандарт изменился чуток и объявленная таким образом переменная видна только внутри for.
Здравствуйте, ArtDenis, Вы писали:
AD>Видимость переменной за пределами цикла это выкрутасы VC6
Впрочем, надо признать как оказалось довольно удобный и практичный выкрутас...
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Здравствуйте, CreatorCray, Вы писали:
AD>>Видимость переменной за пределами цикла это выкрутасы VC6 CC>Впрочем, надо признать как оказалось довольно удобный и практичный выкрутас...
Я отлаживал программу (кажется уже VS2003). Долго не мог понять причину. Оказалось всё просто — я объявлял переменную в цикле и считал, что она имеет локальную область видимости, то есть за пределами цикла её не видно. Ниже использовалась другая переменная, её объявление было убрано на каком-то этапе, но я считал её за отдельную переменную. В результате было 2 переменных вместо одной.
Если объявлять, то лучше так
SSN>BOOL Class::Func () SSN>{ SSN> int i =0; SSN> for (; i < 5; i ++ ) SSN> if ( i == 1 ) SSN> break; SSN> return ( i == 5 ); SSN>}
Здравствуйте, alzt, Вы писали:
AD>>>Видимость переменной за пределами цикла это выкрутасы VC6 CC>>Впрочем, надо признать как оказалось довольно удобный и практичный выкрутас...
A>Я отлаживал программу (кажется уже VS2003). Долго не мог понять причину. Оказалось всё просто — я объявлял переменную в цикле и считал, что она имеет локальную область видимости, то есть за пределами цикла её не видно. Ниже использовалась другая переменная, её объявление было убрано на каком-то этапе, но я считал её за отдельную переменную. В результате было 2 переменных вместо одной.
Если лично вам это не удобно, то это совершенно не означает что это может быть удобно кому то другому.
Это относится и ко всем "несогласным". Я лично рад тому, что этот баг поддерживается большим кол-вом компиляторов, т.к. зачастую то, что объявленная переменная видна после for выходит более удобно и продуктивно.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Здравствуйте, ArtDenis, Вы писали:
AD>Здравствуйте, VoidEx, Вы писали: VE>>С тех пор стандарт изменился чуток и объявленная таким образом переменная видна только внутри for.
AD>Насколько я знаю, к стандарту это никакого отношения не имеет. Видимость переменной за пределами цикла это выкрутасы VC6
Дело в том, что до определенного момента VC и Стандарт Языка С++ были фактически синонимами
Здравствуйте, VoidEx, Вы писали:
VE>Ну формально Project -> Properties -> Configuration properties -> C/C++ -> Language -> Force Conformance In For Loop Scope = No VE>Но это не дело VE>С тех пор стандарт изменился чуток и объявленная таким образом переменная видна только внутри for.
Здравствуйте, VoidEx, Вы писали:
VE>Ну формально Project -> Properties -> Configuration properties -> C/C++ -> Language -> Force Conformance In For Loop Scope = No
Спасиба большое!
А может еще подскажете как решить:
пусть есть Solution из 10 проектов;
каждый проект инклудит один и тот же header в котором есть строка вида:
#define XXX 5
теперь если сделать поиск:
Find what:
XXX
Look in:
Entire Solution
то:
MSVS 2005
на закладке поиска, например, Find Results 1 будет 10 ( десять ) результатов поиска
правда все они будут в одном и том же файле в одном и том же месте ( в общем htader-е )
MSVS 6.0
на закладке поиска, например, Find Results 1 будет 1 ( один ) результат поиска
( в общем htader-е )
Здравствуйте, SSN75, Вы писали:
SSN>>хочется как в шестерке... очень...
SSN>походу наврал насчет 10...
SSN>тем не менее смысл хотения: SSN>исключить повторяющиеся результаты поиска.
используй при поиске не "Entire Solution", а папку, которая содержит все твои проекты.
В Vc6 при поиске задается именно папка.
Здравствуйте, CreatorCray, Вы писали:
CC>Если лично вам это не удобно, то это совершенно не означает что это может быть удобно кому то другому. CC>Это относится и ко всем "несогласным". Я лично рад тому, что этот баг поддерживается большим кол-вом компиляторов, т.к. зачастую то, что объявленная переменная видна после for выходит более удобно и продуктивно.
Тем не менее, это баг. Программы, эксплуатирующие его, становятся непортабельными (вплоть до того, что не выдерживают апгрейд компилятора).
Причём, при удачном стечении обстоятельств, программа может остаться компилируемой — хотя поведение её будет кардинально иным. Можете поэкспериментировать с /Zc:forScope±
#include <iostream>
using namespace std;
int i = 12345;
int main()
{
cout << "before loop: " << i << endl;
for(int i=0; i!=10; ++i)
cout << "within loop: " << i << endl;
cout << "after loop: " << i << endl;
}
А для тех, кому нужно именно такое поведение, которое присуще VC6 — пожалуйста, кто мешает
#include <iostream>
using namespace std;
int i = 12345;
int main()
{
cout << "before loop: " << i << endl;
int i;
for(i=0; i!=10; ++i)
cout << "within loop: " << i << endl;
cout << "after loop: " << i << endl;
}