Re[3]: warning C4702
От: Аноним  
Дата: 17.09.03 23:06
Оценка: 1 (1)
Здравствуйте, Calavera, Вы писали:

C>Вот:

C>
C>/*855*/if(0<_Linkcnt)
C>/*856*/   this->_Alptr.destroy(&_Next(_Pnode));
C>/*857*/this->_Alnod.deallocate(_Pnode, 1);
C>/*858*/_RERAISE;
C>


C>и, что это даст — не перелапачивать ведб весь "list"


Ха ! А я знаю, в чём прикол !

Я же просил привести строки в контексте. К счастью, в VC7.1 этот код сохранился, и выглядит он так :

_TRY_BEGIN
что-то делается...
_CATCH_ALL
if (0 < _Linkcnt)
   this->_Alptr.destroy(&_Nextnode(_Pnode));
this->_Alnod.deallocate(_Pnode, 1);
_RERAISE;
_CATCH_END


Как и следовало ожидать, _CATCH_ALL переходит в } catch (...) { если в проекте разрешены исключения, и в } if (0) { если нет. Теперь понятно, где нашёлся unreachable code, и понятно, что надо сделать — разрешить обработку исключений.
warning C4702
От: Calavera  
Дата: 16.09.03 23:04
Оценка:
Определил свой тип:

#include <list>
...
typedef std::string mystr;
typedef std::list<mystr> mystrlist;
...

И в коде только создаю переменную типа "mystrlist", т.е. ни каких операций с ней не провожу, а копилятор выдает:

c:\program files\microsoft visual studio .net\vc7\include\list(855) : warning C4702: unreachable code
c:\program files\microsoft visual studio .net\vc7\include\list(856) : warning C4702: unreachable code
c:\program files\microsoft visual studio .net\vc7\include\list(857) : warning C4702: unreachable code
c:\program files\microsoft visual studio .net\vc7\include\list(858) : warning C4702: unreachable code

почему так?

18.09.03 14:10: Перенесено модератором из 'C/C++' — ПК
Re: warning C4702
От: SWW Россия  
Дата: 17.09.03 05:02
Оценка:
C>typedef std::list<mystr> mystrlist;
C>...

C>И в коде только создаю переменную типа "mystrlist", т.е. ни каких операций с ней не провожу, а копилятор выдает:


C>c:\program files\microsoft visual studio .net\vc7\include\list(855) : warning C4702: unreachable code


Ты бы показал строки до и после создания mystrlist. Обычно такой варнинг возникает в коде типа
if(TRUE)
    ...
else
    {
    mystrlist sl1, sl2;
    ....
    }
Re[2]: warning C4702
От: Calavera  
Дата: 17.09.03 20:31
Оценка:
Здравствуйте, SWW, Вы писали:

SWW>Ты бы показал строки до и после создания mystrlist. Обычно такой варнинг возникает в коде типа

SWW>
SWW>if(TRUE)
SWW>    ...
SWW>else
SWW>    {
SWW>    mystrlist sl1, sl2;
SWW>    ....
SWW>    }
SWW>


Я создаю ее в классе:
#include "Types.h"

class CMyClass
{
public:
   mystrlist list;
};


где Types.h:
#include <string>
#include <list>

typedef std::string mystr;
typedef std::list<mystr> mystrlist;
Re: warning C4702
От: Аноним  
Дата: 17.09.03 20:43
Оценка:
Здравствуйте, Calavera, Вы писали:

C>Определил свой тип:


C>#include <list>

C>...
C>typedef std::string mystr;
C>typedef std::list<mystr> mystrlist;
C>...

C>И в коде только создаю переменную типа "mystrlist", т.е. ни каких операций с ней не провожу, а копилятор выдает:


C>c:\program files\microsoft visual studio .net\vc7\include\list(855) : warning C4702: unreachable code

C>c:\program files\microsoft visual studio .net\vc7\include\list(856) : warning C4702: unreachable code
C>c:\program files\microsoft visual studio .net\vc7\include\list(857) : warning C4702: unreachable code
C>c:\program files\microsoft visual studio .net\vc7\include\list(858) : warning C4702: unreachable code

C>почему так?


А почему бы тебе не сходить в vc7\include\list и не посмотреть на строки 855-858 ? Или сюда их запостить (вместе с контекстом) ?
Re[2]: warning C4702
От: Calavera  
Дата: 17.09.03 20:53
Оценка:
Вот:
/*855*/if(0<_Linkcnt)
/*856*/   this->_Alptr.destroy(&_Next(_Pnode));
/*857*/this->_Alnod.deallocate(_Pnode, 1);
/*858*/_RERAISE;


и, что это даст — не перелапачивать ведб весь "list"
Re[4]: warning C4702
От: Calavera  
Дата: 18.09.03 20:45
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Как и следовало ожидать, _CATCH_ALL переходит в } catch (...) { если в проекте разрешены исключения, и в } if (0) { если нет. Теперь понятно, где нашёлся unreachable code, и понятно, что надо сделать — разрешить обработку исключений.


Но оно включено по умолчанию:
Configuration Properties->C/C++->Code Generation->Enable C++ Exceptions = Yes(/EHsc).
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.