На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Правила раздела:
1. Название темы - краткое описание кто/что против кого/чего
2. В первом сообщении - список параметров, по которым идет сравнение.
3. Старайтесь аргументировать свои высказывания. Фразы типа "Венда/Слюникс - ацтой" считаются флудом.
4. Давайте жить дружно и не доводить обсуждение до маразма и личных оскорблений.
Модераторы: Модераторы, Комодераторы
Закрыто archimed7592 11-03-2008: Лимит страниц. Продолжаем Delphi vs C++

Страницы: (117) « Первая ... 52 53 [54] 55 56 ...  116 117  ( Перейти к последнему сообщению )  
> Delphi vs C++ , Часть 1
    Цитата Бобёр @
    можно ещё массив void* затолкнуть (или как бишь оно в дельфях зовётся то.. LPVOID или как то так?..)
    там есть pointer, но я не уверен, что его можно к любому другому указателю привести.
      Цитата Allexx @
      там есть pointer, но я не уверен, что его можно к любому другому указателю привести.

      хе. в дельфе всё мона ко всему привести. Если есть желание...
        Цитата
        array of const,

        а что, если у тебя пятый парамет строка, а десятый - число?.. как они уживутся в одном массиве?..

        Цитата
        хе. в дельфе всё мона ко всему привести. Если есть желание...

        :D
        в сях то тоже, reinterpret_cast ещё никто не отменял, но лучше его использовать очень-очень-очень острожно.
          Цитата jack128 @
          хе. в дельфе всё мона ко всему привести. Если есть желание...
          Ну.. интереса ради, а так можно:

          int a

          ((char*)&a)[1]=1;
            Цитата Бобёр @
            а что, если у тебя пятый парамет строка, а десятый - число?.. как они уживутся в одном массиве?..

            В чем проблема? Передается ведь адрес! Но в отличие от указателя, тип каждого такого параметра можно узнать во время исполнения.
              Цитата Бобёр @
              а что, если у тебя пятый парамет строка, а десятый - число?.. как они уживутся в одном массиве?..

              легко и непренужденно. фактически компилятор создает массив структур, аналогичных com'овскому Variant'у и передаёт их в процедуру..
              Цитата Allexx @
              int a

              ((char*)&a)[1]=1;

              Если я правельно понял ты во втротой байт int'а единицу записал?

              Ну если дословно переводить, то так:

              ExpandedWrap disabled
                var
                  a: Integer;
                begin
                  PChar(@a)[1] := chr(1);
                end;


              но более наглядно:

              ExpandedWrap disabled
                type  // этот тип объявлен в одном из стандартных модудей дельфи
                  LongRec = packed record
                    case Integer of
                      0: (Lo, Hi: Word);
                      1: (Words: array [0..1] of Word);
                      2: (Bytes: array [0..3] of Byte);
                  end;
                 
                var
                  a: Integer;
                begin
                  LongRec(a).Bytes[1] := 1;
                end;
                jack128 ну.. 2й метод -- явная проктология. А насчёт первого, если PChar, естественный тип (не класс), то я смотрю, у вас не так всё запущено :)
                  Цитата Allexx @
                  2й метод -- явная проктология.

                  Это еще почему???
                  Цитата Allexx @
                  А насчёт первого, если PChar, естественный тип (не класс),

                  Ну в данном случае именно Pchar - обарабатывается особым образом.

                  но я могу использывать любой другой тип-указатель на массив, например

                  ExpandedWrap disabled
                    type
                      PByteArray = ^TByteArray;
                      TByteArray = array[0..MaxInt-1] of byte;
                     
                     
                    PByteArray(@a)[1] := 1;
                    Цитата Alex Forth @
                    Так значит в Паскале можно хотябы обьявить процедуру с переменным числом параметров?
                    нет. writeln формально(по стандарту паскаля) является процедурой, но на деле это что-то вроде оператора языка.

                    нетипизированный объект - это такая специфическая, тормозная и потенциально глючная штука. Внутри это структура, содержащая два поля - тип объекта(байт) и собственно значение(4 байта). Соответсвенно, все, что больше 4 байт(например, число с плавающей точкой двойной точности, в терминологии C - double), хранится в виде указателя. В паскале это проходит - там все объекты создаются в куче. Естественно, ни о какой производиетльности при таком подходе говорить не приходится.
                      Цитата trainer @
                      по стандарту паскаля

                      где можно почитать?
                        Цитата daevaorn @
                        где можно почитать?
                        поищи сам. Их два:
                        ISO 7185:1990 Pascal
                        ISO 10206:1990 Extended Pascal
                          Цитата Бобёр
                          сам то ты можешь создать процедуру с переменным числом параметров?


                          Цитата Alex Forth
                          На паскале не могу.

                          Ну не моги и дальше :)
                          ExpandedWrap disabled
                            program Hello;
                              procedure printf (str:pchar);overload;cdecl; external 'msvcrt.dll';
                              procedure printf (str:pchar;val:integer);overload;cdecl; external 'msvcrt.dll';
                            const n = #$A#$D;
                            begin
                               printf ('Hello, wtf?'+n);
                               printf ('The hex code is: %x '+n, $12345678);
                            end.


                          Цитата trainer
                          Естественно, ни о какой производиетльности при таком подходе говорить не приходится.

                          О да, особенно с таким неоптимизирующим компилятором!
                          ExpandedWrap disabled
                               mov         eax,000401628
                               call       .000401570  
                               push        00040208C  
                               call        printf ;msvcrt
                               pop         ecx
                               push        012345678
                               push        00040209C
                               call        printf ;msvcrt
                               add         esp,008
                               call       .0004012CC

                          IntelC++ наверно лучше бы оформил?
                          Сообщение отредактировано: N0P -
                            Цитата
                            аналогичных com'овскому Variant'

                            а, ну ещё наверное можно использовать ещё сам VARIANT
                              Цитата N0P @
                              Цитата Бобёр
                              сам то ты можешь создать процедуру с переменным числом параметров?


                              Цитата Alex Forth
                              На паскале не могу.

                              Ну не моги и дальше :)
                              ExpandedWrap disabled
                                program Hello;
                                  procedure printf (str:pchar);overload;cdecl; external 'msvcrt.dll';
                                  procedure printf (str:pchar;val:integer);overload;cdecl; external 'msvcrt.dll';
                                const n = #$A#$D;
                                begin
                                   printf ('Hello, wtf?'+n);
                                   printf ('The hex code is: %x '+n, $12345678);
                                end.

                              А ты "создание процедуры" не попутал с "вызовом процедуры" ?
                                Цитата N0P @
                                ExpandedWrap disabled
                                  program Hello;
                                    procedure printf (str:pchar);overload;cdecl; external 'msvcrt.dll';
                                    procedure printf (str:pchar;val:integer);overload;cdecl; external 'msvcrt.dll';
                                  const n = #$A#$D;
                                  begin
                                     printf ('Hello, wtf?'+n);
                                     printf ('The hex code is: %x '+n, $12345678);
                                  end.

                                А могу я на этих декларациях сделать третий вызов
                                ExpandedWrap disabled
                                  printf('a=%u, b=%g, c=%p', a,b,c);
                                :whistle:
                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                0 пользователей:
                                Страницы: (117) « Первая ... 52 53 [54] 55 56 ...  116 117
                                Закрыто archimed7592 11-03-2008: Лимит страниц. Продолжаем Delphi vs C++



                                Рейтинг@Mail.ru
                                [ Script execution time: 0,2007 ]   [ 15 queries used ]   [ Generated: 12.08.25, 02:58 GMT ]