Переключение на Главную Страницу Страницы: 1 [2]  ОтправитьПечать
Горячая тема (более 10 ответов) VC6 - опаньки (число прочтений - 10993 )
Uzhast
1c++ power user
Отсутствует



Сообщений: 1341
Зарегистрирован: 30. Августа 2006
Пол: Мужской
Re: VC6 - опаньки
Ответ #15 - 07. Февраля 2007 :: 07:52
Печать  
kms писал(а) 06. Февраля 2007 :: 23:13:
А, не догнал сразу, что ты свой проект собирал.

Сейчас, просто по приколу, собрал 1С++. Ошибок было только две:

1)
Код
Выбрать все
D:\Program r.h(129): error: expression must be an lvalue or a function designator
			memcpy(Row.m_pDims + Offset, &(Source[i].AsDate().m_dt), CurSize); 



заменил на
Код
Выбрать все
				CDBField Field = Source[i];
				COleDateTime DateTime = Field.AsDate ();
		    //memcpy(Row.m_pDims + Offset, &(Source[i].AsDate().m_dt), CurSize);
				memcpy(Row.m_pDims + Offset, &DateTime.m_dt, CurSize); 



2)
Код
Выбрать все
D:\Program 8): error: ambiguous "?" operation: second operand of type "unsigned long" can be converted to third operand type "const CNumeric", and vice versa
	BOOL SetPropTextColor(CValue const& Value) {SetTextColor(SET_V7_COLOR(Value)); return TRUE;}; 


Подправил макрос SET_V7_COLOR:
#define SET_V7_COLOR(vValue) (vValue == -1 ? CLR_DEFAULT : (int)vValue.GetNumeric())

Выдал кучу крайне антиресных ворнингов Улыбка Например, оказывается, в 1С++ в printf'оподобные функции часто передается CString без приведения к const char *. Странно, я и не знал, что такое может работать Улыбка Компилятор, естественно, ругается, говорит не POD-тип. Например, здесь:
Код
Выбрать все
s\");",strCompute); 


Передан strCompute. Для sprintf он вообще прямо говорит:
"argument is incompatible with corresponding format string conversion"

Много всяких "omission of explicit type is nonstandard ("int" assumed)". Ну, это естественно Улыбка

Также полно ворнингов про неиспользуемые переменные, что уже стало обычным Улыбка

Выдался любопытный ворнинг в DynaValue.cpp:
Код
Выбрать все
D:\Program Files\DevStudio\MyProjects\1cpp.repo\1cpp\Source\DynaValue.cpp(865): warning #187: use of "=" where "==" may have been intended
     if(p[3]='2')
 


Ругается на фрагмент:
Код
Выбрать все
	if(*p=='#')
	{
		if(p[1]=='d' && p[2]=='v')
		{
			if(p[3]='2') // <= здесь
			{
				ver=2;
			}
			else
			{
				ver=-1;
			}
			p+=4;
		}
		else
		{
			ver=-1;
		}
	} 


А может он прав?! Улыбка

Перед компиляцией пришлось убрать опцию препроцессора: "DelayLoad:Basic.dll". Кстати, зачем она? Вроде же это опция линкера?

Собрать-то собрал, но тестовая конфа для 1С++ компоненту не запускает... Тут уже глубже надо разбираться.
  
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: VC6 - опаньки
Ответ #16 - 07. Февраля 2007 :: 08:15
Печать  
Uzhast писал(а) 07. Февраля 2007 :: 07:52:
Выдался любопытный ворнинг в DynaValue.cpp:
Код
Выбрать все
D:\Program Files\DevStudio\MyProjects\1cpp.repo\1cpp\Source\DynaValue.cpp(865): warning #187: use of "=" where "==" may have been intended
     if(p[3]='2')
 



ИМХО нужный ворнинг, потому что косяк.
Жаль, что ВС6 за этим не следит, очень удобно.
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer &amp;&amp; tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: VC6 - опаньки
Ответ #17 - 07. Февраля 2007 :: 09:34
Печать  
artbear писал(а) 07. Февраля 2007 :: 08:15:
Жаль, что ВС6 за этим не следит, очень удобно.

зря вы на вс6 баллон катите - поставьте ворнинг левел4 и наслаждайтесь.
плуг энд плей как говорится Улыбка
  

De quelle planète es-tu?
Наверх
 
IP записан
 
Uzhast
1c++ power user
Отсутствует



Сообщений: 1341
Зарегистрирован: 30. Августа 2006
Пол: Мужской
Re: VC6 - опаньки
Ответ #18 - 07. Февраля 2007 :: 09:36
Печать  
kms писал(а) 07. Февраля 2007 :: 09:34:
зря вы на вс6 баллон катите - поставьте ворнинг левел4 и наслаждайтесь.
плуг энд плей как говорится Улыбка

Угу, зато там столько всего постороннего вылезет (особенно, в STL), что просто пипец Улыбка
  
Наверх
 
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: VC6 - опаньки
Ответ #19 - 07. Февраля 2007 :: 09:42
Печать  
Да, извините за плохую стилистику пред. сообщения - руки были заняты, набирать было неудобно. Улыбка

DynaValue - на косяк похоже, точно.

Цитата:
Передан strCompute. Для sprintf он вообще прямо говорит:
"argument is incompatible with corresponding format string conversion"

Вообще-то проканывает, потому как преобразуется через оператор LPCTSTR().
Прикол начинается с таким кодом в следующих версиях MFC, где такого оператора нема.
  

De quelle planète es-tu?
Наверх
 
IP записан
 
Uzhast
1c++ power user
Отсутствует



Сообщений: 1341
Зарегистрирован: 30. Августа 2006
Пол: Мужской
Re: VC6 - опаньки
Ответ #20 - 07. Февраля 2007 :: 09:46
Печать  
kms писал(а) 07. Февраля 2007 :: 09:42:
Цитата:
Передан strCompute. Для sprintf он вообще прямо говорит:
"argument is incompatible with corresponding format string conversion"

Вообще-то проканывает, потому как преобразуется через оператор LPCTSTR().
Прикол начинается с таким кодом в следующих версиях MFC, где такого оператора нема.

Не, не преобразуется. Ведь sprintf принимает ЛЮБЫЕ параметры. Поэтому при передаче просто в стек запихивается весь CString. 1С++ спасает только то, что первый член CString - это адрес буфера ASCIIZ. Если бы, не дай бог, буфер бы не был всегда ASCIIZ, то были бы проблемы. Если бы первым членом CString не был бы адрес буфера (а, например, размер буфера), то опять же были бы проблемы. ИМХО, нужно явно преобразовывать. Сейчас оно конечно канает, но вот привычку неправильную вырабатывает Улыбка
  
Наверх
 
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: VC6 - опаньки
Ответ #21 - 07. Февраля 2007 :: 12:17
Печать  
Точно, в этом случае запихивает весь класс (ужоснах).
А в седьмом MFC еще и преобразования в LPCTSTR отваливаются.
  

De quelle planète es-tu?
Наверх
 
IP записан
 
orefkov
1c++ developer
1c++ moderator
Отсутствует


I Love YaBB 2!

Сообщений: 896
Зарегистрирован: 20. Мая 2006
Re: VC6 - опаньки
Ответ #22 - 08. Февраля 2007 :: 05:30
Печать  
kms писал(а) 07. Февраля 2007 :: 12:17:
Точно, в этом случае запихивает весь класс (ужоснах).
А в седьмом MFC еще и преобразования в LPCTSTR отваливаются.

Ну, в 6-ке размер CString - 4 байта, так как первый и единственный его член - указатель на строку.
А длина, счетчик ссылок и тп лежат перед строкой.
Так что не все так страшно.
Что CString передавай, что (LPCSTR)CString, без разницы.
Но лучше все-же приводить, во избежание таксать, а то наверняка еще констрктор копирования вызывается.
  
Наверх
 
IP записан
 
Uzhast
1c++ power user
Отсутствует



Сообщений: 1341
Зарегистрирован: 30. Августа 2006
Пол: Мужской
Re: VC6 - опаньки
Ответ #23 - 08. Февраля 2007 :: 18:16
Печать  
Про STL (http://rsdn.ru/Forum/Message.aspx?mid=868158&only=1): ; Улыбка
Цитата:
Насчет STL можно поспорить. Как развивался STL? Русский чувачок Степанов сделал "Stepanov Template Library" для конкретного компилятора и конкретной платформы. Страусу Трупу это дело очень понравилось и он все описал в своей книжке. Но кроме этого, обнаружились некие деятели из Microsoft, которые решили сказать, что "а у нас тоже типа вот". Типа STL, C++, все круто. Но оказалось, что исходники Степанова ихним компилятором просто не компилируются. Ну это же плохие исходники! Не править же нам из за какого-то там Степанова свой мега-компилятор! Ну и что с того, что с ним Страуструп дружит?! У нас собственное вИдение. И вот взяли они книжку Страуструпа и по ней забубенили имплементацию в соответствии со своим корпоративным мега-стандартом. Вообще-то, никакого кода они не писали, они взяли тексты некого P.J. Plauger из HP и поправили их чуток. Ну совсем чуток, чтобы хотя бы компилировалось. И получилось вот такая вот тоже STL. Едрёныть. Фиг с ним, что на практике там больше граблей чем пользы, но ведь зато STL! И вот пока такие криворукие имплементации существуют и более того, широко распространены, лично я использую STL с очень большой оглядкой. Буст в этом смысле даже лучше, в нем изначально учтены особенности убогих компиляторов. Но в этом же и грабли. Получается слишком много условной компиляции, которая делат код нечитабельным. Короче говоря, ну в общем вы поняли. Я просто гоню, наслушавшись Шендеровича
  
Наверх
 
IP записан
 
Uzhast
1c++ power user
Отсутствует



Сообщений: 1341
Зарегистрирован: 30. Августа 2006
Пол: Мужской
Re: VC6 - опаньки
Ответ #24 - 09. Марта 2007 :: 20:15
Печать  
Вот еще какие проблемы удалось найти в STL VC6:
  • Код
    Выбрать все
    string str;
     str = "1111111111112222222222222223333333333333333333";
     str = str.c_str(); 
    
    

    Если в str была строка > 32 символов, то после присваивания str будет равна "". http://rsdn.ru/Forum/Message.aspx?mid=267205&only=1 Правда, по стандарту это не ошибка. Надеяться, что такой код будет работать, нельзя.
  • AV в данном коде:
    Код
    Выбрать все
    #include <iostream>
    #include <iomanip>
    
    int main(int argc,char* argv[])
    {
      using namespace std;
      double x=123451234512345123451234512345e+64;
      cout<<setiosflags(ios::fixed);
      cout<<x<<endl;
      return 0;
    } 
    
    
  • Не работает интервальный insert для set (http://rsdn.ru/Forum/Message.aspx?mid=441899&only=1) (А вот это уже гадство).

В общем, перелопатил почти все. Никакой информации об утечках в STL VC6 найти не удалось. Перелопачивание заняло огромное время. В основном, из-за всяких здоровенных веток вроде "Delphi vs C++", ".NET/C# vs C++", "Nemerle vs ВсеОстальные" (по несколько дней иногда на чтение уходило)  Смех
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1 [2] 
ОтправитьПечать