Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2007.12.02;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.55 MB
Время: 0.045 c
2-1194428093
allucard
2007-11-07 12:34
2007.12.02
тип данных


2-1194343616
Sergl
2007-11-06 13:06
2007.12.02
Номер коннекта в сокетах


2-1194698727
mufan
2007-11-10 15:45
2007.12.02
"Подвисание" компьютера при работе рекурсии и цикла...


6-1175429195
wolchonok29
2007-04-01 16:06
2007.12.02
Загрузка из потока


3-1184791338
Dik59
2007-07-19 00:42
2007.12.02
Работа с длинным целым





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский