K10 ненужный мусор. Слова имеющие отношение только к либам. В длл-ях ни импов, ни @xx нет PS хрена себе тут рост. пойду-ка отседова.
beginner Не знаю, что ты имеешь ввиду под "классическим" Паскалем, но на делфи можно так Code (Text): procedure SomeProc(A1: Byte; A2: Byte = 11; A3: Byte = 22); begin // end; SomeProc(12); SomeProc(12, 34); SomeProc(12, 34, 56); также есть overload
Здравствуйте уважаемые форумчане! Меня интересует программирование Сим-карт мобильных телефонов, что это такое и с чем его едят? С чего начать, для чего это нужно? Дайте пожалуйста источник информации, желательно подробный и доступный для понимания. Спасибо!
не смог сдержаться Даешь учить гуиле. Оч распространен, оч прост (меня про него не спрашивать. простые ланги не учу. не интересно) Даешь учить МЛ (мета-ланг) со потомки. Оч перспективен, щас много на нем рубят. XshStasX Ыгу. и проца ничего в еах не возвращает. А флоаты, ой, реалы в чем возвращаются?
K10 Это функция (процедура) с параметрами по умолчанию. В ней всего 3 параметра, два из которых заданных по умолчанию. Я имел ввиду сделать свою функцию, в которой заранее не известно сколько будет параметров, их может быть и 5 и 55. пример на С Code (Text): int myFunc(char c1, char* s, ...) { // чтото делаем }; myFunc('a', "stroka 1", 1, 0.02, hFile); myFunc('a', "stroka 2", 1, "abc", 0.05, 25); Ну и наиболее частый в реальной работе пример: myFunc('a', "x=%d, y=%c, z=%p, i=%f, y=%s", 1, 'a', &var1, 0.09, "stroka"); Ессно подобных параметров может быть скока угодно. K10 пример множественного кейса я выложил в посте под #135. Единственный минус, требуется следить, что бы значения не пересекались, для этого можно сделать вообще вложенный switch. Все просто
beginner Code (Text): procedure MyFunc; stdcall; asm POP EAX // 1-й параметр, что-то делаем POP EAX // 2-й параметр, что-то делаем ... POP EAX // N-й параметр, что-то делаем end; вызов: asm PUSH Param PUSH Param ... PUSH Param CALL MyFunc end; Нет такого, чего нельзя сделать на Делфи это один if...then и один НЕмножественный case
K10 Это асм-вставка, это не паскаль!! Мне пожалуйста на паскале только!! в посте 135 нет ни одного if-then, там только switch-case. И еще В вашем примере нужно обязательно указывать кол-во параметров, которые передаются в функцию, или хотя бы указывать завершающий параметр, который прекратит извлекать их из стека. На С указывать кол-во параметров не обязательно. :-P
Да я так, показать что нет ничего невозможного Если серьезно, то кроме wsprintf сложно придумать, когда могут понадобится функции с неограниченным переменным числом параметров. Code (Text): switch ((c>=10)&&(c<=40)) { case TRUE: Sleep(1); break; }; Это case из двух булевых значений true и false - не более чем извращенная запись if...then...else Далее идет уже настоящий case Code (Text): switch (c) { case 1: Sleep(1); break; case 2: Sleep(1); break; case 3: Sleep(1); break; }
В таких функциях один из первых обязательных параметров должен явно или неявно(в случае wsprintf) определять количество последующих опциональных параметров. Иначе как функция узнает сколько параметров вытаскивать из стека?
K10 тот же самый множественный кейс, то в другой форме записи а вы чего ожидали, что будут такие же операторы, как на паскале? я ж не требую от вас написать на паскале выражение max = a>b?a:b; потому что на паскале нет такой конструкции, а есть только if-then-else. Согласитесь, что без использования асма - написать на паскале (делфи) функцию с переменным числом параметров не представляется возможным. 1:0 в пользу Сишников :-P
beginner кажется с 7й версии дельфи ввели тринарный условный оператор функция с переменным числом параметров тоже есть, через variant-массивы, например функция format, аналог sprintf
GoldFinch хм... делфи в роли догоняющего? т.е. делфи берет фичи из языка С и применяет их к себе? а есть что то такое, что бы С взяло из делфи?
это не множественный кейс, это два разных кейса, один из которых - форма записи if...then Code (Text): if (a >= 10) AND (a <= 40) then Sleep(1) else begin case a of 1 : ... 2 : ... end; end; так что 1:1, нету у вас множественного кейса
http://ru.wikipedia.org/wiki/%D0%9D%D0%B5%D0%BE%D0%BA%D0%B0%D1%82%D0%B0%D1%81%D1%82%D1%80%D0%BE%D1%84%D0%B8%D0%B7%D0%BC Если теория по ссылке выше будет доказана, то да. А так - нет
K10 Code (Text): for (int x=100, int y=150, int z=200; ((z+x)!=(x+y)); x+=10,y-=15) { // что то делаем } Тоже самое, вы в паскале не можете в цикле for писать сразу несколько начальных данных, не можете сделать произвольное прирощение цикла, и не можете убрать любой из параметров цикла for. Можете только заменить одну строку на языке С десятью строчками на языке паскаль так что 2:1
beginner Вот пример из документации по ФриПаскалю, который будет работать и в Дельфях: Code (Text): function Average (Row : array of Integer) : Real; var i : Longint; Temp : Real; begin Temp := Row[0]; for i := 1 to High(Row) do Temp := Temp + Row[i]; Average := Temp / (High(Row)+1); end; Так что возможность передачи переменного числа параметров имеется. Однако даже если б её не было, в любом случае это не было б однозначным 1:0 в пользу сишников, потому что подобные конструкции зачастую представляют очень большую опасность, а вот польза от них в большинстве случаев весьма сомнительна. GoldFinch Никогда про таковой не слышал. Но даже если он есть, использовать не стану: запутывает программу, как и соответствующий оператор Си. Ну а от нажатия несколько лишних клавиш у меня руки не отвалятся, так что лучше обычный if-then-else. Единственное, что мне действительно не нравится в Паскале/Дельфях по сравнению с Си -- это невозможность выйти из функции и вернуть значение одним оператором (аналогично return). Правда, в последней версии Дельфей (2009 вроде) такую возможность наконец-то обеспечили, судя по имеющейся инфе. beginner Считаете, что расширение языка конструкциями, аналогичными имеющимися в других языках -- это признак недоразвитости языка? Ну тогда вспомните про Си, который кучу всего заимствовал и превратился в Си++. И кстати, почему тогда не сказать, что Си, как и Паскаль, взяли управляющие структуры (не синтаксис, а семантику) у Алгола? Ведь ни Си, ни Паскаль не являются первыми языками высокого уровня. Кстати, то, что в Си любой массив индексируется только целыми числами и только начиная с 0, является довольно большим недостатком, ведь нередко "логические" индексы не начинаются с нуля или вообще не являются целыми числами. Что на низком уровне любой индекс переводится в смещение относительно начала массива, это понятно, но мне не нравится, когда заботиться об этом должен я, а не компилятор.
beginner да о чем речь вообще -- суслику понятно, что синтаксич. конструкции языков разные, так что неясно в чем спор? спорить можно не о синаксич. различиях в конструкциях языков, а по поводу юзабильности самих языков. до кучи давайте еще упомянем дельфовую Code (Text): with NameOfRecord do begin recordField1 = blabla; recordField2 = blablabla; end что-то в этом духе, вспомнил по памяти. и что теперь, это знак того что делфя круче си(++) ? бред SII +1 !
beginner А вот это, извините, уже полная ерунда. Потому что подобная запись на Си очень запутывает программу, затрудняет её отладку и понимание. Ну а никакой выгоды, не считая уменьшения количества нажатых клавиш, это не даёт: на выходе получается один и тот же код (конечно, при условии одинакового качества компиляции; однако преимущества Интел С++ над Дельфями в плане оптимизации является достоинством интеловского компилятора, а не самого языка). В общем, основная масса доводов в пользу Си сводится к тому, что в нём надо меньше давить на клаву, что лично для меня не является сколько-нибудь заметным преимуществом. А вот резкое падение читабельности кода при таком подходе -- это не просто недостаток, это недостаток катастрофический. Особенно заметен, конечно, в Си++: попробуй продерись через стандартные библиотеки, например.
Code (Text): {$apptype console} program fuckoff; const crt = 'msvcrt.dll'; n = #$0A#$0D; procedure printf (str:pchar);cdecl; overload; external crt; procedure printf (str:pchar; val:integer);cdecl; overload; external crt; procedure printf (str:pchar; val:double);cdecl; overload; external crt; begin printf ('Hello'+n); printf ('%x '+n,$12345678); printf ('%f '+n, sin(pi / 2)); end. beginner обьявить и отьюзать ф-кцию нет проблема. Code (Text): int myFunc(char c1, char* s, ...) { // чтото делаем }; Ток вот здесь придеться оч много гемору иметь =)))