Форум » [x]Harbour » Mingw » Ответить

Mingw

ММК: Mingw выдает следующие ошибки : ../../../function/bpaint.c: In function 'HB_FUN_SBTNPAINT': ../../../function/bpaint.c:48:12: warning: type of 'PARAMS' defaults to 'int' ../../../function/bpaint.c:51:4: warning: implicit declaration of function 'Hb_parnl' ../../../function/bpaint.c:53:4: warning: implicit declaration of function 'Hb_parl' ../../../function/bpaint.c:55:4: warning: implicit declaration of function 'Hb_parc' ../../../function/bpaint.c:55:25: warning: initialization makes pointer from integer without a cast ../../../function/bpaint.c:56:4: warning: implicit declaration of function 'Hb_parni' ../../../function/bpaint.c:76:56: warning: signed and unsigned type in conditional expression ../../../function/bpaint.c:77:56: warning: signed and unsigned type in conditional expression ../../../function/bpaint.c:102:30: warning: unused variable 'hMask' ../../../function/bpaint.c:102:21: warning: unused variable 'hBmOld2' ../../../function/bpaint.c:101:11: warning: unused variable 'lpBits' ../../../function/bpaint.c:100:10: warning: unused variable 'pt' ../../../function/bpaint.c:97:21: warning: unused variable 'nDC' ../../../function/bpaint.c:97:16: warning: unused variable 'mDC' ../../../function/bpaint.c:90:15: warning: unused variable 'bs' ../../../function/bpaint.c:87:13: warning: unused variable 'lb' ../../../function/bpaint.c:48:12: warning: unused parameter 'PARAMS' и т.д. Текст имеет вид : #include <WinTen.h> /* set your own path if needed */ #include <Windows.h> #include <HbApi.h> /* set your own path if needed */ #include <StdLib.h> #define NOTSRCAND 0x220326 #define S_LNUM 0x0002 #define S_DNUM 0x0008 #define S_LOG 0x0080 #define S_CHAR 0x0400 #define S_ANYNUM ( S_LNUM | S_DNUM ) #define ISCHAR( s ) ( hb_param( s, S_CHAR ) != NULL ) #define ISNUM( s ) ( hb_param( s, S_ANYNUM ) != NULL ) #define ISLOGICAL( s ) ( hb_param( s, S_LOG ) != NULL ) int hue, sat, lig ; void DrawBitmap( HDC hdc, HBITMAP hbm, WORD wCol, WORD wRow, WORD wWidth, WORD wHeight, DWORD dwRaster ) ; static void DrawMasked( HDC hdc, HBITMAP hbm, signed int y, signed int x ) ; static void DrawGrayed( HDC hDC, HBITMAP hBmp, signed int iRow, signed int iCol ) ; void DrawGray( HDC hDC, HBITMAP hBmp, signed int iRow, signed int iCol ) ; static void RectDisable( HDC , LPRECT ) ; void GoPoint( HDC, int, int ) ; COLORREF MakeDarker( COLORREF, signed long ) ; void VertSeparator( HDC, HWND, int, COLORREF, BOOL ) ; void HorzSeparator( HDC, HWND, int, COLORREF, BOOL ) ; void SBtnBox( HDC, RECT *, COLORREF, BOOL, int ) ; void ColorDegrad( HDC hDC, RECT * rori, COLORREF cFrom, COLORREF cTo, int nDegType, int iRound, int iCorner ) ; static void DegradColor( HDC hDC, RECT * rori, COLORREF ColorFrom, COLORREF ColorTo ) ; void SBtnRoundBox( HDC, RECT *, COLORREF, BOOL, BOOL ) ; void cDrawBoxes( HDC, RECT *, int, LPSTR, HFONT, int, COLORREF, COLORREF, COLORREF, BOOL, int ) ; int GetTextExtent( HDC, LPSTR, int ) ; BOOL AlphaPaint( HDC dcDest, int x, int y, int cx, int cy, HDC dcSrc, int sx, int sy, int scx, int scy, int alpha ) ; BOOL DetectAlpha( HDC dcSrc, int sx, int sy, int scx, int scy ) ; //---------------------------------------------------------------------------// #ifndef __HARBOUR__ CLIPPER SBtnPaint( PARAMS ) // ( hWnd, hBitmaP, lPressed, // hFont, cText, nPos, nClrText, ClrBack, // lMouseOver, lOpaque, hBrush, nRows, lW97, // lAdjust, lMenu, lMenuPress, lFocused, // nShape, lBorder, lBox, nClip, nClrTo, lHorz, lRound ) #else HARBOUR HB_FUN_SBTNPAINT( PARAMS ) #endif { HWND hWnd = ( HWND ) Hb_parnl( 1 ) ; HBITMAP hBitMap1 = ( HBITMAP ) Hb_parnl( 2 ) ; BOOL bPressed = Hb_parl( 3 ) ; HFONT hFont = ( HFONT ) Hb_parnl( 4 ) ; LPSTR cText = Hb_parc( 5 ) ; int nPos = Hb_parni( 6 ) ; COLORREF nClrText = Hb_parnl( 7 ) ; COLORREF ClrBack = Hb_parnl( 8 ) ; BOOL bMOver = Hb_parl( 9 ) ; BOOL bOpaque = Hb_parl( 10 ) ; HBRUSH wBrush = ( HBRUSH ) Hb_parni( 11 ) ; int nRows = Hb_parni( 12 ) ; int iBorder = Hb_parni( 13 ) ; BOOL bAdjust = Hb_parl( 14 ) ; BOOL bMenu = Hb_parl( 15 ) ; BOOL bMPress = Hb_parl( 16 ) ; BOOL bFocused = Hb_parl( 17 ) ; int iShape = Hb_parni( 18 ) ; int iClip = Hb_parni( 19 ) ; COLORREF nClrTo = Hb_parnl( 20 ) ; int iDegType = Hb_parni( 21 ) ; HBITMAP hShape = ( HBITMAP ) Hb_parnl( 22 ) ; BOOL bDisable = Hb_parl( 23 ) ; BOOL b3DInv = ( ISLOGICAL( 24 ) ? ! Hb_parl( 24 ) : FALSE ) ; BOOL b3D = ( ISLOGICAL( 24 ) ? TRUE : FALSE ) ; COLORREF nClr3DL = ( ISNUM( 25 ) ? Hb_parnl( 25 ) : GetSysColor( COLOR_BTNHIGHLIGHT ) ) ; COLORREF nClr3DS = ( ISNUM( 26 ) ? Hb_parnl( 26 ) : GetSysColor( COLOR_BTNSHADOW ) ) ; int iTTop = Hb_parni( 27 ) ; int iTLeft = Hb_parni( 28 ) ; BOOL bClrRct = Hb_parl( 29 ) ; int iClipTot = Hb_parni( 30 ) ; COLORREF ClrBord = Hb_parnl( 31 ) ; BOOL bBBar = Hb_parl( 32 ) ; int iCorner = ( ISNUM( 33 ) ? Hb_parni( 33 ) : 0 ) ; int iAlpha = Hb_parni( 34 ) ; BOOL bTPos = ISNUM( 27 ) ; LOGBRUSH lb ; RECT rct, rctt, rctm, rctb ; HBRUSH hBrush, hBOld ; BITMAP bm, bs ; TEXTMETRIC tm ; HFONT hOldFont ; WORD nTop, nLeft, nBkOld ; int iROP, iType, iBottom, iTop, iLeft, iRight ; WORD nWidth, nHeight, ibmWidth ; COLORREF lBkColor ; HDC hdcBmp, mDC, nDC, hDC = GetDC( hWnd ) ; HRGN hRgn, hRgn1, hOldRgn, hOldRg1 ; HPEN hPen, hOldPen ; POINT pt ; LPBYTE lpBits ; HBITMAP hBmOld1, hBmOld2, hMask ; bOpaque = ( bAdjust ? TRUE : bOpaque ) ; hOldFont = SelectObject( hDC, hFont ) ; GetClientRect( hWnd, &rctt ) ; GetClientRect( hWnd, &rctb ) ; GetClientRect( hWnd, &rct ) ; GetTextMetrics( hDC, &tm ) ; SetTextColor( hDC, nClrText ) ; SetBkColor( hDC, ClrBack ) ; lBkColor = GetBkColor( hDC ) ; nHeight = ( nRows > 0 ? nRows * tm.tmHeight : tm.tmHeight ) ; if( nPos ) { switch( nPos ) { case 6 : // text on top out of button rct.top += nHeight ; rctb.top += nHeight ; rct.bottom += nHeight ; rctb.bottom += nHeight ; break ; case 7 : // text on bottom out of button rct.bottom -= nHeight ; rctb.bottom -= nHeight ; break ; } } if( wBrush ) hBOld = SelectObject( hDC, wBrush ) ; if( hShape || ! iBorder || iBorder == 3 ) nBkOld = SetBkMode( hDC, TRANSPARENT ) ; if( nPos && hBitMap1 ) GetObject( ( HGDIOBJ ) hBitMap1, sizeof( BITMAP ), ( LPSTR ) &bm ) ; switch( iShape ) { case 4 : // bitmap shape { DrawMasked( hDC, hShape, rct.top, rct.left ) ; break ; } case 5 : // office shape и т.д. ........................ Какие мне надо внести исправления , что бы "лишиться" этих ошибок?

Ответов - 20

PSP: Это просто предупреждения. Думаю, ничего страшного в них нет. К примеру, "Unused..." - неиспользуемые переменные, просто удали их объявление. Остальные, думаю, тоже не страшней... :)

ММК: PSP пишет: К примеру, "Unused..." - неиспользуемые переменные, просто удали их объявление. Остальные, думаю, тоже не страшней... :) Вот именно остальное и страшней :)) Действительно , эти предупреждения не мешают собраться библиотеке. Но, вот когда она (библиотека) используется далее , то возникают практически те же ошибки - ffmpeg/lib/LibBut.a(bpaint.o):bpaint.c:(.text+0x10bb): undefined reference to `Hb_parni' ffmpeg/lib/LibBut.a(bpaint.o):bpaint.c:(.text+0x10c9): undefined reference to `Hb_parl' ffmpeg/lib/LibBut.a(bpaint.o):bpaint.c:(.text+0x10ec): undefined reference to `Hb_parl' ffmpeg/lib/LibBut.a(bpaint.o):bpaint.c:(.text+0x10fc): undefined reference to `Hb_parnl' ffmpeg/lib/LibBut.a(bpaint.o):bpaint.c:(.text+0x110a): undefined reference to `Hb_parni' ..... В результате - collect2: ld returned 1 exit status hbmk2: Error: Running linker. 1

gfilatov2002: ММК пишет: ffmpeg/lib/LibBut.a(bpaint.o):bpaint.c:(.text+0x10bb): undefined reference to `Hb_parni' ffmpeg/lib/LibBut.a(bpaint.o):bpaint.c:(.text+0x10c9): undefined reference to `Hb_parl' ffmpeg/lib/LibBut.a(bpaint.o):bpaint.c:(.text+0x10ec): undefined reference to `Hb_parl' ffmpeg/lib/LibBut.a(bpaint.o):bpaint.c:(.text+0x10fc): undefined reference to `Hb_parnl' ffmpeg/lib/LibBut.a(bpaint.o):bpaint.c:(.text+0x110a): undefined reference to `Hb_parni' Теперь стало яснее В харборе используются следующие функции hb_parl hb_parnl hb_parni Ошибка возникает из-за того, что С-компилятор является регистро-чувствительным и для него Hb_parl и hb_parl - это разные функции...


ММК: gfilatov2002 пишет: С-компилятор является регистро-чувствительным и для него Hb_parl и hb_parl - это разные функции. Да , действительно это так! Вы правы:) Но от эnого ситуация стала еще веселее :)) Мейчас не могу собрать библиотеку! Функция была первоночально написана под ВСС ( Меркадовские красивые кнопки и т.д. TsButoon ) и функции hb_parl и hb_parni имели вид - _parl и _parnil плюс #include <ClipApi.h> Пытаюсь собрать под Харбор3+Mingw в соответствии с чем ClipApi.h заменяется на hbApi.h И вот здесь новая проблема - определение hb_parni разное. В ClipApi.h int _parni( WORD wParam, ... ); А в hbApi.h int hb_parni( int iParam ) Исходная ф-я имеет (точнее с заменой _parni на hb_parni) следующую конструкцию- int iTop = hb_parni( 2, 1 ) ; int iLeft = hb_parni( 2, 2 ) ; int iBottom = hb_parni( 2, 3 ) ; int iRight = hb_parni( 2, 4 ) ; Т.е. содержит по два параметра , которые с Харбором3 уже не проходят. Какие могут быть варианты?

gfilatov2002: ММК пишет: Какие могут быть варианты? Попробуйте заменить hb_parni на hb_parvni

Сыроежка: ММК пишет: ./../../function/bpaint.c: In function 'HB_FUN_SBTNPAINT': ../../../function/bpaint.c:48:12: warning: type of 'PARAMS' defaults to 'int' ../../../function/bpaint.c:51:4: warning: implicit declaration of function 'Hb_parnl' ../../../function/bpaint.c:53:4: warning: implicit declaration of function 'Hb_parl' ../../../function/bpaint.c:55:4: warning: implicit declaration of function 'Hb_parc' ../../../function/bpaint.c:55:25: warning: initialization makes pointer from integer without a cast ../../../function/bpaint.c:56:4: warning: implicit declaration of function 'Hb_parni' ../../../function/bpaint.c:76:56: warning: signed and unsigned type in conditional expression ../../../function/bpaint.c:77:56: warning: signed and unsigned type in conditional expression ../../../function/bpaint.c:102:30: warning: unused variable 'hMask' ../../../function/bpaint.c:102:21: warning: unused variable 'hBmOld2' ../../../function/bpaint.c:101:11: warning: unused variable 'lpBits' ../../../function/bpaint.c:100:10: warning: unused variable 'pt' ../../../function/bpaint.c:97:21: warning: unused variable 'nDC' ../../../function/bpaint.c:97:16: warning: unused variable 'mDC' ../../../function/bpaint.c:90:15: warning: unused variable 'bs' ../../../function/bpaint.c:87:13: warning: unused variable 'lb' ../../../function/bpaint.c:48:12: warning: unused parameter 'PARAMS' Я могу прокомментировать некоторые сообщения. Сообщение ../../../function/bpaint.c:48:12: warning: type of 'PARAMS' defaults to 'int' означает, что компилятор не видит объявление переменной PARAMS и принимает правило по умолчанию,что ее тип равен int. Такое возможно,если объявляется функция в старом стиле без указания типов параметров. Или когда вобласти видимости появляется перменная, а ее объявления компилятор не видит. Такое возможно, если вы компилировали старым компилятором Borland. Вообще-то, это не соответствует стандарту С, и новые компиляторы это не пропускают. Так что мой совет -это перейти на более современный компилятор. Сообщение ../../../function/bpaint.c:51:4: warning: implicit declaration of function 'Hb_parnl' означает,что в коде используется вызов функции, однако компилятор не видит объявления этой функции. Сообщение ../../../function/bpaint.c:55:25: warning: initialization makes pointer from integer without a cast означает,что где-то в коде указателю присваивается целочисленное значение, что естественно без приведения типов делать нельзя. Сообщение ../../../function/bpaint.c:76:56: warning: signed and unsigned type in conditional expression означает,что имеет место попытка сравнить знаковое целочисленное значение с беззнаковым. Проблема в том, что в этом случае знаковое число будет рассматриваться как беззнаковое и как таковое может по абсолютной величине оказаться больше второго беззнакового операнда. Это сообщение ./../../function/bpaint.c:102:30: warning: unused variable 'hMask' самое безобидное. Оно просто сообщает, что в коде объявлены переменные, но они не используются. Проблема в том, что многие, кто пишет на Clipper, обычно плохо знают С, и при этом используют старые компиляторы С. Хочу заметить, что сам Clipper писался с использованием С++! Об этом многие не знают, но, например, SET ( установка различных опций в Clipper) - это объект класса!

ММК: gfilatov2002 пишет: Попробуйте заменить hb_parni на hb_parvni Ну все , надо наливать Большое Вам спасибо ! Так может прислать Вам исходники ? Сейчас они работают с третьим харбором + Mingw. В вашем проекте будет не лишнее :))) И не подскажете ли мне какую книжечку ( наверное по gсс ? ) желательно на рус. и без лишней лирики. Для начинающего :) Спасибо!

ММК: Сыроежка пишет: Я могу прокомментировать некоторые сообщения. Большое спасибо , но я просил о помощи в конкретной сишной теме! :) Сыроежка пишет: Проблема в том, что многие, кто пишет на Clipper, обычно плохо знают С, и при этом используют старые компиляторы С. С плохим знание си соглашусь, но компиляторы , какие же они старые? И всс и mingw последних версий.. Сыроежка пишет: Хочу заметить, что сам Clipper писался с использованием С++! Об этом многие не знаю Вряд ли .. не знают :) Да и при чем здесь клиппер?!!! Если я правильно Вас понимаю - си Вы знаете ? Вот довайте попробуем совершенно конкретную вещь - какие исправления внести в пр-му? Избавимся от ненужных предупреждений :)) Под Mingw.

Сыроежка: ММК пишет: Большое спасибо , но я просил о помощи в конкретной сишной теме! :) Так я вам и конкретно сообщил, что означают ваши многочисленные сообщения компилятора. ММК пишет: С плохим знание си соглашусь, но компиляторы , какие же они старые? И всс и mingw последних версий.. Компилятор Borland, которым обычно пользуются для сборки Harbour достаточно старый. Достаточно сказать, что уже давно не существует такой фирмы, как Borland, а разработка компилятора давно перекочевала в другие руки по крайней мере два раза. Более того новый стандарт С был принят в 1999 году, и компилятор Borland его не поддерживает. ОН лишь поддерживает С стандарта 1989 года. А тем более он не удовлетворяет стандарту С++. ММК пишет: Вряд ли .. не знают :) Да и при чем здесь клиппер?!!! Увы, на самом деле это многие не знают! Думают, что Clipper был написан на С, а не С++. То есть не знают, что исходный код Clipper писался с использованием классов и объектов. Только не путайте классы Clipper типа Browse с классами С++. Какое отношение это имеет к Clipper? Самое прямое! Это имеет отношение к его исходным кодам.ММК пишет: Если я правильно Вас понимаю - си Вы знаете ? Вот довайте попробуем совершенно конкретную вещь - какие исправления внести в пр-му? Избавимся от ненужных предупреждений :)) Да, я знаю С и С++ на уровне стандартов языков. Таких, как я , немного, так как большинство даже в глаза не видели стандартов С и С++. К тому же я знаю Clipper на уровне исходных кодов. Поэтому вопрос, заданный недавно Димой в разделе Clipper про дату, для меня банальный. Более того я могу сказать, какой имеется баг с датой у Clipper. Но мне это в настоящее время не интересно. Я не занимаюсь Harbour. У меня сейчас круг интересов - С и С++.

ММК: Сыроежка пишет: Да, я знаю С и С++ Оставим лирику. Что я должен исправить ? Компилятор Mingw

santy: Сыроежка пишет: К тому же я знаю Clipper на уровне исходных кодов Интересно. У вас есть исходные коды clippera? Какой версии, если не секрет?

AlexMyr: santy пишет: Какой версии, если не секрет? Наверное summer 87.

Сыроежка: santy пишет: Сыроежка пишет: цитата: К тому же я знаю Clipper на уровне исходных кодов Интересно. У вас есть исходные коды clippera? Какой версии, если не секрет? В основном это Clipper 5.01 и Clipper 5.2d. Clipper 5.3a я в меньшей степени восстанавливал исходный код, так как не было такой насущной необходимости. Да и, как я уже написал, я уже давно отошел от Clipper. Заглядываю сюда лишь из чувства ностальгии.

Сыроежка: Я сейчас снова взглянул на исходное сообщение темы, и стала ясна причина первого сообщения. ../../../function/bpaint.c: In function 'HB_FUN_SBTNPAINT': ../../../function/bpaint.c:48:12: warning: type of 'PARAMS' defaults to 'int' Дело в том, что в приведенном вами коде есть такие строки объявления этой функции CLIPPER SBtnPaint( PARAMS ) // ( hWnd, hBitmaP, lPressed, // hFont, cText, nPos, nClrText, ClrBack, // lMouseOver, lOpaque, hBrush, nRows, lW97, // lAdjust, lMenu, lMenuPress, lFocused, // nShape, lBorder, lBox, nClip, nClrTo, lHorz, lRound ) #else HARBOUR HB_FUN_SBTNPAINT( PARAMS ) #endif Как видите, тип параметр PARAMS не указан. Дело в том, что на самом деле никакие параметры этой функции не передаются. Параметры извлекаются из стека Clipper. Поэтому обычно переменную PARAMS определяют как void с помощью препроцессорной команды #define. Очевидно, что в вашем случае компилятор не видит этого определения PARAMS , а поэтому думает, что это - реальная переменная и присваивает ей тип int. Чтобы избавиться от этого сообщения, вам нужно включить заголовочный файл, который содержит препроцессорную директиву #define для идентификатора PARAMS

AlexMyr: Сыроежка пишет: К тому же я знаю Clipper на уровне исходных кодов. Сыроежка пишет: В основном это Clipper 5.01 и Clipper 5.2d. Clipper 5.3a я в меньшей степени восстанавливал исходный код, То ВЫ так сказать - компьютерный хулиган , по лицензии это запрещено делать

Pasha: Сыроежка пишет: Увы, на самом деле это многие не знают! Думают, что Clipper был написан на С, а не С++. То есть не знают, что исходный код Clipper писался с использованием классов и объектов. Это же легко проверить. Достаточно задать поиск текста *.cpp в каталоге clipper\lib В 5.2 модулей, написанных на c++, нет вообще. В 5.3 в dbfcdx.lib есть несколько модулей на c++, относящиехя к flex. Но это, собственно, не сам клиппер. И... ?

Сыроежка: Pasha пишет: Это же легко проверить. Достаточно задать поиск текста *.cpp в каталоге clipper\lib В 5.2 модулей, написанных на c++, нет вообще. В 5.3 в dbfcdx.lib есть несколько модулей на c++, относящиехя к flex. Но это, собственно, не сам клиппер. И... ? На мой взгляд это не даст правильного ответа. То, что в этом каталоге, допустим, нет файлов с расширением *.cpp, ни о чем не говорит. Надо смотреть не этот каталог, а сами модули внутри библиотеки Clipper.lib. Например, драйвер баз данных. Базовый класс описан в модуле wa.obj ( сокращение от слов work areas), а все другие драйверы, как, например, DBF или SDF, являются производными от базового класса, заданного в модуле wa.obj.. Если я не ошибаюсь, то в документации к Clipper 5.02 (в одном из файлов пакета) дается некоторая документация по драйверам баз данных, и как написать свой драйвер базы данных.

Pasha: Сыроежка пишет: На мой взгляд это не даст правильного ответа. То, что в этом каталоге, допустим, нет файлов с расширением *.cpp, ни о чем не говорит. Надо смотреть не этот каталог, а сами модули внутри библиотеки Clipper.lib. Например, драйвер баз данных. Базовый класс описан в модуле wa.obj ( сокращение от слов work areas), а все другие драйверы, как, например, DBF или SDF, являются производными от базового класса, заданного в модуле wa.obj.. Если я не ошибаюсь, то в документации к Clipper 5.02 (в одном из файлов пакета) дается некоторая документация по драйверам баз данных, и как написать свой драйвер базы данных. Владимир, Вы, похоже, крепко забыли клиппер. Зачем фантазировать, выдумывать C++ в клиппере ? Такого модуля, wa.obj, нет. Есть модуль workarea. И он написан на C, а не C++. Исходник - D:\CC\DBCMD\WORKAREA.С И модуль set тоже написан на C. Зачем придумывать то, чего нет, да еще пытаясь при этом запутать ? Ведь это элементарно проверяется.

Сыроежка: Pasha пишет: Владимир, Вы, похоже, крепко забыли клиппер. Зачем фантазировать, выдумывать C++ в клиппере ? Такого модуля, wa.obj, нет. Есть модуль workarea. И он написан на C, а не C++. Исходник - D:\CC\DBCMD\WORKAREA.С И модуль set тоже написан на C. Зачем придумывать то, чего нет, да еще пытаясь при этом запутать ? Ведь это элементарно проверяется. Модуль wa.obj - это значит мною переименованный модуль workarea.obj. То есть я извлек workarea.obj, а затем переименовал его в wa.obj для работы над ним. Самое забавное, что я даже не смотрел workarea.c, если такой существует! Но тем не менее, глядя на ассемблерный код этого модуля, то там очевидно, что описаны методы и дана структура данных. А другие драйверы вызывают эти методы. Вполне возможно, что авторы Clipper моделировали объектно-ориентированное программирование С++ на С. Когда я восстанавливал этот модуль я использовал средства объектно-ориентированного программирования TASM 4.1. Значит это действительно мои фантазии, но тем не менее надо отдать должное, авторы Clipper даже на С писали в объектно-ориентированном стиле. Мне, вот, только странно, структура SET содержит указатель на саму себя. А это означает, что это объект класса, так как на "физическом" уровне указатель thos включается в структуру. Наверное они планировали перейти на С++, а потому делали код, в наибольшей степени иметирующий объектный код С++.

Pasha: Сыроежка пишет: Наверное они планировали перейти на С++, а потому делали код, в наибольшей степени иметирующий объектный код С++. Мнэ.. помимо Ваших выдающихся и уникальных способностей, с которыми Вы нас так квалифицированно ознакомили, Вы еще и телепат. Для тренировки рекомендую дизассамблировать модуль workarea.obj из харбора, воскликнуть: да здесь явно видно объекты ! Он написан на C++ ! А узнав, что модуль написан таки на C, порассуждать на тему, что разработчики харбора планируют переписать его на C++ :)



полная версия страницы