Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.12.02;
Скачать: CL | DM;

Вниз

С++ не перестает удивлять.   Найти похожие ветки 

 
Riply ©   (2007-10-26 11:28) [0]

Здравствуте !
Помогите, пожалуйста, разобраться с вражьим языком.
Написана на нем очень большая и длинная процедура (сильно много букав тама :)
Имеет она, примерно, такой вид:

LONG STDCALL
SomeProc(TSomeType Param)
{
...........
 if Condition1
  {
   PVOID Buffer;
..........
 if Condition2
  {
   PVOID Buffer;
..........
}
где ".........." - километр кода.

Buffer - одна и та же переменная или разные (регистром они не отличаются) ?
Как бы мне задекларировать эти два Buffer`а ?
Можно ли (нужно ли) обойтись одним или надо два (Buffer1 и Buffer2) ?

P.S.
А еще кто-то говорил о наглядности С :)


 
Игорь Шевченко ©   (2007-10-26 11:30) [1]

Плохой код можно написать на любом языке.

There"s no limit to how bad things can get (c)


> Как бы мне задекларировать эти два Buffer`а ?


LONG STDCALL
SomeProc(TSomeType Param)
{
 PVOID Buffer;
.....


 
Desdechado ©   (2007-10-26 11:32) [2]

Это просто разные переменные с одинаковым именем. Отличаются областью видимости. Но если тип у них один, можно при переводе на паскаль обявить одну переменную, как ИШ показал.


 
Riply ©   (2007-10-26 11:44) [3]

Спасибо всем.

> [1] Игорь Шевченко ©   (26.10.07 11:30)
> Плохой код можно написать на любом языке.
А я-то думала, что толко на Delphi можно разные "перлы" выдавать :)


 
guav   (2007-10-26 11:46) [4]

Переменные разные, но ничто не мешает взять одну.

> А еще кто-то говорил о наглядности С :)

В данном как раз есть преимущество, можно ограничить область видимости, сделав её минимально необходимой и отложить объявление до места инициализации, и, таким образом, не иметь дело с переменой которая видна но не инициализирована.
Только это С++ а не С.


 
clickmaker ©   (2007-10-26 11:46) [5]


> А я-то думала, что толко на Delphi можно разные "перлы"
> выдавать

на Д как раз так при всем желании не сделаешь


 
Ega23 ©   (2007-10-26 11:47) [6]


> А я-то думала, что толко на Delphi можно разные "перлы"
> выдавать :)


:)


#include <stdio.h>
main(t,_,a)char *a;{return!0<t?t<3?main(-79,-13,a+main(-87,1-_,
main(-86,0,a+1)+a)):1,t<_?main(t+1,_,a):3,main(-94,-27+t,a)&&t==2?_<13?
main(2,_+1,"%s %d %d\n"):9:16:t<0?t<-72?main(_,t,
"@n"+,#"/*{}w+/w#cdnr/+,{}r/*de}+,/*{*+,/w{%+,/w#q#n+,/#{l+,/n{n+,/+#n+,/#\
;#q#n+,/+k#;*+,/"r :"d*"3,}{w+K w"K:"+}e#";dq#"l \
q#"+d"K#!/+k#;q#"r}eKK#}w"r}eKK{nl]"/#;#q#n"){)#}w"){){nl]"/+#n";d}rw" i;# \
){nl]!/n{n#"; r{#w"r nc{nl]"/#{l,+"K {rw" iK{;[{nl]"/w#q#n"wk nw" \
iwk{KK{nl]!/w{%"l##w#" i; :{nl]"/*{q#"ld;r"}{nlwb!/*de}"c \
;;{nl"-{}rw]"/+,}##"*}#nc,",#nw]"/+kd"+e}+;#"rdq#w! nr"/ ") }+}{rl#"{n" ")# \
}"+}##(!!/")
:t<-50?_==*a?putchar(31[a]):main(-65,_,a+1):main((*a=="/")+t,_,a+1)
:0<t?main(2,2,"%s"):*a=="/"||main(0,main(-61,*a,
"!ek;dc i@bK"(q)-[w]*%n+r3#l,{}:\nuwloca-O;m .vpbks,fxntdCeghiry"),a+1);}


 
Игорь Шевченко ©   (2007-10-26 11:51) [7]

Ega23 ©   (26.10.07 11:47) [6]

if (pos("  ",VarToStr(Values))<>0) or
      (VarToStr(Values)<>trim(VarToStr(Values))) or
      ((Length(VarToStr(Values))-
       Length(StringReplace(VarToStr(Values)," ","",[rfReplaceAll])))<>2) then


 
Ega23 ©   (2007-10-26 11:58) [8]


> Игорь Шевченко ©   (26.10.07 11:51) [7]


Тоже хорошо. Но IncDay - круче...  :)

Но, откровенно говоря, такого ужаса как в [6] на паскале я себе просто представить не могу.


 
Riply ©   (2007-10-26 12:01) [9]

> [6] Ega23 ©   (26.10.07 11:47)
А это "из жизни" или чья-то шутка ?


 
guav   (2007-10-26 12:01) [10]


> Ega23 ©   (26.10.07 11:47) [6]

Скомпилил, выполнил. Супер ! Интересно как такое было написано ?


 
Riply ©   (2007-10-26 12:03) [11]

> [4] guav   (26.10.07 11:46)
> В данном как раз есть преимущество,

Сомнительное "преимущество", когда в рамках одной процедуры
есть N разных переменных с одинаковыми именами :)


 
vajo   (2007-10-26 12:06) [12]

>guav   (26.10.07 12:01) [10]
и что там было?


 
@!!ex ©   (2007-10-26 12:06) [13]

> [11] Riply ©   (26.10.07 12:03)

Спорнвй вопрос. Они же каждая - в своей зоне видимости.
ВАс же не удивлет когда у одного класса в разныхметодах используется одна и таже переменная?
Они в разных зонах видимости. Так что ничего особенного.


 
guav   (2007-10-26 12:09) [14]


> Riply ©   (26.10.07 12:03) [11]

Я не про этот код, я вообще.
Если все области видимости достаточно короткие, то вполне можно использовать имя повторно. Ты ж не испытываешь проблем с одинаковыми именами локальных переменных в разных методах, не так ли ?


 
Petr V. Abramov ©   (2007-10-26 12:09) [15]

> Riply ©   (26.10.07 12:03) [11]
это какая-нить i и в процедуре несколько while`ов - полезно, не надо забывать обнулить.


 
guav   (2007-10-26 12:09) [16]


> vajo   (26.10.07 12:06) [12]

On the first day of Christmas my true love gave to me
a partridge in a pear tree.

On the second day of Christmas my true love gave to me
two turtle doves
and a partridge in a pear tree.

On the third day of Christmas my true love gave to me
three french hens, two turtle doves
and a partridge in a pear tree.

On the fourth day of Christmas my true love gave to me
four calling birds, three french hens, two turtle doves
and a partridge in a pear tree.

On the fifth day of Christmas my true love gave to me
five gold rings;
four calling birds, three french hens, two turtle doves
and a partridge in a pear tree.

On the sixth day of Christmas my true love gave to me
six geese a-laying, five gold rings;
four calling birds, three french hens, two turtle doves
and a partridge in a pear tree.

On the seventh day of Christmas my true love gave to me
seven swans a-swimming,
six geese a-laying, five gold rings;
four calling birds, three french hens, two turtle doves
and a partridge in a pear tree.

On the eigth day of Christmas my true love gave to me
eight maids a-milking, seven swans a-swimming,
six geese a-laying, five gold rings;
four calling birds, three french hens, two turtle doves
and a partridge in a pear tree.

On the ninth day of Christmas my true love gave to me
nine ladies dancing, eight maids a-milking, seven swans a-swimming,
six geese a-laying, five gold rings;
four calling birds, three french hens, two turtle doves
and a partridge in a pear tree.

On the tenth day of Christmas my true love gave to me
ten lords a-leaping,
nine ladies dancing, eight maids a-milking, seven swans a-swimming,
six geese a-laying, five gold rings;
four calling birds, three french hens, two turtle doves
and a partridge in a pear tree.

On the eleventh day of Christmas my true love gave to me
eleven pipers piping, ten lords a-leaping,
nine ladies dancing, eight maids a-milking, seven swans a-swimming,
six geese a-laying, five gold rings;
four calling birds, three french hens, two turtle doves
and a partridge in a pear tree.

On the twelfth day of Christmas my true love gave to me
twelve drummers drumming, eleven pipers piping, ten lords a-leaping,
nine ladies dancing, eight maids a-milking, seven swans a-swimming,
six geese a-laying, five gold rings;
four calling birds, three french hens, two turtle doves
and a partridge in a pear tree.


 
Юрий Зотов ©   (2007-10-26 12:10) [17]

> Riply ©   (26.10.07 12:03) [11]

> Сомнительное "преимущество", когда в рамках одной процедуры
> есть N разных переменных с одинаковыми именами :)

Они в разных блоках и в каждом актуальна своя. Вполне нормально.


 
Riply ©   (2007-10-26 12:41) [18]

Т.е. в C-и, блоки это как бы такие маленькие, самостоятельные подпроцедурки ? :)


 
@!!ex ©   (2007-10-26 12:43) [19]

> [18] Riply ©   (26.10.07 12:41)

если смотреть с точки зрения зоны видимости переменных - то да.


 
KSergey ©   (2007-10-26 12:44) [20]

> Riply ©   (26.10.07 12:41) [18]
> Т.е. в C-и, блоки это как бы такие маленькие, самостоятельные подпроцедурки ? :)

В смысле области видимости объявленных в них переменных - видимо да


 
KSergey ©   (2007-10-26 12:45) [21]

:)))


 
Alkid ©   (2007-10-26 13:33) [22]


> Ega23 ©   (26.10.07 11:47) [6]

Та ну, это же явный стёб :)
Примерно из разряда программ на Malbolge и прочего исследования границ сознания :)


 
Ega23 ©   (2007-10-26 13:36) [23]


> Та ну, это же явный стёб :)


То что это стёб - это ясно. Тут другое - напиши такю фигню на паскале..  :)
Я, честно говоря, даже представить себе не могу.
Хотя, если принять как следует....   :)


 
Alkid ©   (2007-10-26 13:47) [24]


> То что это стёб - это ясно. Тут другое - напиши такю фигню
> на паскале..  :)
> Я, честно говоря, даже представить себе не могу.
> Хотя, если принять как следует....   :)

Ну хз. Воообще там интесивно, я смотрю, используется тернанрый оператор, который не имеет прямого аналога в Дельфи.


 
EvChul ©   (2007-10-26 15:14) [25]

Набрел где-то на следующий код.

procedure TForm1.Button1Click(Sender: TObject);
begin
ShowMessage(_(_(_(_(^(,^%),^,),^,),^/)+^`+_(^(,_(^%,_(^,,_(^,,^/)))));
end;


Извратиться везде можно.


 
homm ©   (2007-10-26 15:25) [26]

> [25] EvChul ©   (26.10.07 15:14)

И какое будет сообщение?


 
EvChul ©   (2007-10-26 15:33) [27]

homm ©   (26.10.07 15:25) [26]
И какое будет сообщение?


Hello world!


 
@!!ex ©   (2007-10-26 15:38) [28]

> [25] EvChul ©   (26.10.07 15:14)

не компилится.


 
guav ©   (2007-10-26 17:34) [29]


> @!!ex ©   (26.10.07 15:38) [28]

Не хватает чего-то вроде
function _(__,___:string):string;
begin
_:=__+___;
end;CODE>


 
jack128_   (2007-10-26 17:51) [30]


> EvChul ©   (26.10.07 15:14) [25]

ну тут то всего одна специфическая фишка языка использована, в отличии от сишного изврата...


 
Riply ©   (2007-10-27 19:04) [31]

За написание процедур, содержащих более ста сторочек кода,
должен полагаться расстрел на месте. Вот.
:)


 
Petr V. Abramov ©   (2007-10-27 19:15) [32]

> Riply ©   (27.10.07 19:04) [31]
а за написание более одного оператора на строке? :)


 
Steep   (2007-10-27 19:19) [33]

function _(__,___:string):string;
begin
_:=__+___;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
ShowMessage(_(_(_(_(^(,^%),^,),^,),^/)+^`+_(^(,_(^%,_(^,,_(^,,^/)))));
end;


А можете объяснить это как получается?? 0_о


 
Anatoly Podgoretsky ©   (2007-10-27 19:21) [34]

> Petr V. Abramov  (27.10.2007 19:15:32)  [32]

Тогда гранату сразу бросать.


 
Riply ©   (2007-10-27 19:23) [35]

> [32] Petr V. Abramov ©   (27.10.07 19:15)
> а за написание более одного оператора на строке? :)
В данном случае можно обойтись смертной казнью через отлучение от компьютера :)


 
tesseract ©   (2007-10-27 19:24) [36]


> За написание процедур, содержащих более ста сторочек кода,
> должен полагаться расстрел на месте. Вот.


Ой, у меня больше тысячи расстрелов в запасе.


> То что это стёб - это ясно. Тут другое - напиши такю фигню
> на паскале..  :)


Паскаля идея базовая, такой фигни допускать нет :-)

ЗЫ : Магистра Йоды тайна раскрыта, фортрана специалист да великий он


 
jack128 ©   (2007-10-27 20:02) [37]


> А можете объяснить это как получается?? 0_о

В дельфи есть такой синтаксис:
^A  , где A - любой символ.  Означает он chr(ord("A")  - 64).
Таким образом:
^A = #1
^B = #2
и так далее.  
Плюс к этому учти, что символ подчеркивания может использоваться в идентификаторах наравне с буквами.. Вот так и получается..


 
Steep   (2007-10-27 20:45) [38]


> В дельфи есть такой синтаксис:^A  , где A - любой символ.
>   Означает он chr(ord("A")  - 64).Таким образом:^A = #1^B
> = #2и так далее.  Плюс к этому учти, что символ подчеркивания
> может использоваться в идентификаторах наравне с буквами.
> . Вот так и получается..

усе равно не понял...
понял только саму функцию....

> ^A  , где A - любой символ.  Означает он chr(ord("A")  -
>  64).

то что chr(ord("A")  -  64 - я понимаю, а вот ^A = #1
нет


 
Anatoly Podgoretsky ©   (2007-10-27 20:49) [39]


> где A - любой символ.  Означает он chr(ord("A")  - 64).

Вообще то, если точно, то chr(ord(char) and $1F).


 
guav ©   (2007-10-27 21:47) [40]


> За написание процедур, содержащих более ста сторочек кода,
>
> должен полагаться расстрел на месте. Вот.
> :)

"Hey! I hate these Microsoft guys! What a rotten compiler! It only accepts 16384 local variables in a function!"


> Anatoly Podgoretsky ©   (27.10.07 20:49) [39]

Если бы так, сообщение было бы другое.

Кстати, по сабжу, много критики С++ здесь: http://yosefk.com/c++fqa/index.html .



Страницы: 1 2 вся ветка

Текущий архив: 2007.12.02;
Скачать: CL | DM;

Наверх




Память: 0.57 MB
Время: 0.024 c
15-1194322708
Slider007
2007-11-06 07:18
2007.12.02
С днем рождения ! 6 ноября 2007 вторник


2-1194606611
DontFire
2007-11-09 14:10
2007.12.02
Как вставить сепаратор в mainmenu?


15-1194092585
Kostafey
2007-11-03 15:23
2007.12.02
NOOOXML


15-1193771493
ProgRAMmer Dimonych
2007-10-30 22:11
2007.12.02
Подкиньте, плз, идейку


8-1170501964
Совсем новичок
2007-02-03 14:26
2007.12.02
Оперделить угол поворота