|
|
  |
Pascal для AVR |
|
|
|
Dec 12 2008, 22:27
|

кекс
     
Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326

|
Цитата(Огурцов @ Dec 12 2008, 18:12)  Знаток си defunct мог бы для приличия скомпилить свой код под gcc, например, для avr, а потом то же самое переложить на if и скомпилить еще раз. И удивиться. И больше никогда дурацкий сишний switch не юзать. Мимо кассы. Какое отношение конкретный компилятор имеет к возможностям языка? Все равно, что сказать - возьмите паскаль компайлер от микроэлектроника и попробуйте сложить два "real" аргумента. И протащиться удивиться от результата. И больше никогда дурацкий паскалевский REAL не юзать. Цитата(Rst7 @ Dec 12 2008, 21:11)  А потом турбопаскаль научился раздельной компиляции. И Борманд  придумал библиотеку типа теперешнего VCL, только в текстовом режиме работала. TurboVision. У меня по ней книжка до сих пор валяется. Классная вещь была - красиво построена.
|
|
|
|
|
Dec 13 2008, 00:07
|
Гуру
     
Группа: Участник
Сообщений: 3 928
Регистрация: 28-03-07
Из: РФ
Пользователь №: 26 588

|
Цитата(ARV @ Dec 12 2008, 18:37)  просто для вас ламер - это тот, кто не с вами, вот и все. знаем таких, проходили в школе. не хватает лишь лозунга "бей паскальников!" Не, не так, нужно еще добавить для порядку "бей паскальников, спасай Россию!"  Цитата(zltigo @ Dec 12 2008, 19:16)  Это реально привлекло в программировние людей, многие из которых стали ламерами Не, я бы сказал, ламерами не становятся, ламерами рождаются. Цитата(zltigo @ Dec 12 2008, 18:15)  поскольку на расплодившихся ламеров обратили свое внимание и другие более крутые фирмы и забрали их к себе В общем, обида, видимо, в том, что на умненьких, беленьких и пушистеньких сишников никто не обращает внимание и к себе не забирает. А я вот вам таки скажу, какой язык программирования самый правильный - идите на job.ru и смотрите цены. Я надеюсь никто из присутствующих не будет спорить с тем, в каком месте находится си/встраиваемый си ? Цитата(defunct @ Dec 12 2008, 22:27)  Мимо кассы. Какое отношение конкретный компилятор имеет к возможностям языка? Утверждаете, что GCC - плохой компилятор ?
|
|
|
|
|
Dec 13 2008, 01:59
|

кекс
     
Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326

|
Цитата(Огурцов @ Dec 13 2008, 02:07)  Утверждаете, что GCC - плохой компилятор ? Нет, gcc хороший компилятор плюс еще и бесплатный, но он имеет и недостатки. Для AVR - это например неэффективная с т.з. быстродейтсвия организация стека и как раз неэффективная генерация кода для switch. Однако, есть компиляторы более эффективно справляющиеся с оператором switch - VS, RVDS, IAR... Может лучше их асм код посмотрим? Эффективность и правильность работы Real операндов ведь тоже не зависит от языка, это проблема конкретного компилятора. По оператору варианта. Паскаль не дает возможности выполнения множества вариантов, C - дает. Вы языки хотели сравнить или компиляторы? Если первое - тогда почему просто не примете факт - по оператору варианта Паскаль слил? Есои второе - так скажите наконец - где же взять эффективный компилятор Pascal для AVR? ;>
|
|
|
|
|
Dec 13 2008, 09:27
|

Гуру
     
Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244

|
Цитата(Огурцов @ Dec 13 2008, 12:16)  Ничуть, все легко и красиво реализуется на if - не надо без необходимости умножать сущности (с). А вот си слил свой switch по скорости. И если вы не понимаете, почему, почитайте про case самостоятельно. Огурцов продолжает нести пургу  . Сколь-нибудь вменяемый компилятор прекрасно оптимизирует баланс между if() и switch() при этом получая или абсолютно идентичный код для if() и switch() в простых случаях применения, либо много более высокоэффективный по скорости табличный код для сложных switch(). При этом switch() выигрывает и по читаемости (в невырожденных случаях) и всегда по расширяемости. По второй причине я достаточно часто использую switch() и в вырожденном варианте в качестве 'рыбы' для возможного последующего расширения. Кусок реального исходника: Код void ring_parser( Fdata_t *udp ) { switch( udp->state ) { case oNHOOK: set_state( udp, dIALtONE ); break; default: break; } udp->timer = xTickCount; } Причем код при этом получается ни на бит не отличающийся от if()
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Dec 13 2008, 10:30
|
Гуру
     
Группа: Участник
Сообщений: 3 928
Регистрация: 28-03-07
Из: РФ
Пользователь №: 26 588

|
Цитата(zltigo @ Dec 13 2008, 09:27)  Огурцов продолжает нести пургу Ничуть, проверено, как и сказал выше на WinAVR-GCC. Вообще, считаю его хорошим компилятором, поэтому всякие "но он имеет и недостатки" не катят. Особенно в форуме AVR/PIC. Ну а про остальное - вам тоже нужно объяснять чем case от if/switch отличается ? Грустно. Ссылки на компилеры: (сейчас e-lab стащу) http://e-lab.de/index_en.htmlEmbedded Pascal for the AVR http://users.iafrica.com/r/ra/rainier/pasavr.exeMikroElektronika Advanced Pascal Compiler for AVR #16194 http://www.dontronics-shop.com/mikroelektr...er-for-avr.htmlТабличка внизу http://www.computerbase.de/lexikon/Atmel_AVRВо, ребята отрываются ) Код Programming in C is: for(;P("\n").R-;P("|"))for(e=3DC;e-;P("_"+(*u++/8)%2))P("| "+(*u/4)%2); and hunting for pointer BUGs for ever ...............
Сообщение отредактировал Огурцов - Dec 13 2008, 10:33
|
|
|
|
|
Dec 13 2008, 11:16
|

Гуру
     
Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244

|
Цитата(Огурцов @ Dec 13 2008, 13:30)  Во, ребята отрываются ) Ну так и отрывались-бы там вместе. Вместо этого начинаете выказывать глупость в местах, где ее способны оценить по "достоинству". Цитата(Огурцов @ Dec 13 2008, 13:30)  Вообще, считаю его хорошим компилятором.... Вы многе еще чего "считаете", причем совершенно догматично-безосновательно  . Код 152 void show_mode_if(void) \ show_mode_if: 153 { \ 00000000 939A ST -Y, R25 \ 00000002 938A ST -Y, R24 154 if( ( mod_flag & MF_MODE_MASK ) == 2 ) \ 00000004 .... LDI R30, mod_flag \ 00000006 8100 LD R16, Z \ 00000008 7003 ANDI R16, 0x03 \ 0000000A 3002 CPI R16, 2 \ 0000000C F459 BRNE ??show_mode_if_0 155 { PORTD &= (~(PD_LED_SAW|PD_LED_TRIANGULAR|PD_LED_RANDOM)); \ 0000000E B302 IN R16, 0x12 \ 00000010 7F08 ANDI R16, 0xF8 \ 00000012 BB02 OUT 0x12, R16 156 PORTD |= PD_LED_RANDOM; \ 00000014 9A92 SBI 0x12, 0x02 157 srand( (ushort)run_cnt + 1 ); \ 00000016 .... LDI R30, run_cnt \ 00000018 8180 LD R24, Z \ 0000001A E090 LDI R25, 0 \ 0000001C 9601 ADIW R25:R24, 1 \ 0000001E 018C MOVW R17:R16, R25:R24 \ 00000020 .... RCALL srand \ 00000022 C010 RJMP ??show_mode_if_1 158 } 159 else if( ( mod_flag & MF_MODE_MASK ) == 1 ) \ ??show_mode_if_0: \ 00000024 3001 CPI R16, 1 \ 00000026 F429 BRNE ??show_mode_if_2 160 { PORTD &= (~(PD_LED_SAW|PD_LED_TRIANGULAR|PD_LED_RANDOM)); \ 00000028 B302 IN R16, 0x12 \ 0000002A 7F08 ANDI R16, 0xF8 \ 0000002C BB02 OUT 0x12, R16 161 PORTD |= PD_LED_TRIANGULAR; \ 0000002E 9A91 SBI 0x12, 0x01 \ 00000030 C009 RJMP ??show_mode_if_1 162 } 163 else if( ( mod_flag & MF_MODE_MASK ) == 0 ) \ ??show_mode_if_2: \ 00000032 2300 TST R16 \ 00000034 F019 BREQ ??show_mode_if_3 164 { PORTD &= (~(PD_LED_SAW|PD_LED_TRIANGULAR|PD_LED_RANDOM)); 165 PORTD |= PD_LED_SAW; 166 } 167 else 168 { mod_flag &= (~MF_MODE_MASK); \ 00000036 8100 LD R16, Z \ 00000038 7F0C ANDI R16, 0xFC \ 0000003A 8300 ST Z, R16 169 PORTD &= (~(PD_LED_SAW|PD_LED_TRIANGULAR|PD_LED_RANDOM)); \ ??show_mode_if_3: \ 0000003C B302 IN R16, 0x12 \ 0000003E 7F08 ANDI R16, 0xF8 \ 00000040 BB02 OUT 0x12, R16 170 PORTD |= PD_LED_SAW; \ 00000042 9A90 SBI 0x12, 0x00 171 } 172 } \ ??show_mode_if_1: \ 00000044 9189 LD R24, Y+ \ 00000046 9199 LD R25, Y+ \ 00000048 9508 RET
174 void show_mode_sw(void) \ show_mode_sw: 175 { \ 00000000 939A ST -Y, R25 \ 00000002 938A ST -Y, R24 176 switch( mod_flag & MF_MODE_MASK ) \ 00000004 .... LDI R30, mod_flag \ 00000006 8100 LD R16, Z \ 00000008 7003 ANDI R16, 0x03 \ 0000000A F0B9 BREQ ??show_mode_sw_0 \ 0000000C 950A DEC R16 \ 0000000E F069 BREQ ??show_mode_sw_1 \ 00000010 950A DEC R16 \ 00000012 F481 BRNE ??show_mode_sw_2 177 { 178 case 2: 179 PORTD &= (~(PD_LED_SAW|PD_LED_TRIANGULAR|PD_LED_RANDOM)); \ 00000014 B302 IN R16, 0x12 \ 00000016 7F08 ANDI R16, 0xF8 \ 00000018 BB02 OUT 0x12, R16 180 PORTD |= PD_LED_RANDOM; \ 0000001A 9A92 SBI 0x12, 0x02 181 srand( (ushort)run_cnt + 1 ); \ 0000001C .... LDI R30, run_cnt \ 0000001E 8180 LD R24, Z \ 00000020 E090 LDI R25, 0 \ 00000022 9601 ADIW R25:R24, 1 \ 00000024 018C MOVW R17:R16, R25:R24 \ 00000026 .... RCALL srand \ 00000028 C00C RJMP ??show_mode_sw_3 182 break; 183 184 case 1: 185 PORTD &= (~(PD_LED_SAW|PD_LED_TRIANGULAR|PD_LED_RANDOM)); \ ??show_mode_sw_1: \ 0000002A B302 IN R16, 0x12 \ 0000002C 7F08 ANDI R16, 0xF8 \ 0000002E BB02 OUT 0x12, R16 186 PORTD |= PD_LED_TRIANGULAR; \ 00000030 9A91 SBI 0x12, 0x01 \ 00000032 C007 RJMP ??show_mode_sw_3 187 break; 188 189 default: 190 mod_flag &= (~MF_MODE_MASK); \ ??show_mode_sw_2: \ 00000034 8100 LD R16, Z \ 00000036 7F0C ANDI R16, 0xFC \ 00000038 8300 ST Z, R16 191 192 case 0: 193 PORTD &= (~(PD_LED_SAW|PD_LED_TRIANGULAR|PD_LED_RANDOM)); \ ??show_mode_sw_0: \ 0000003A B302 IN R16, 0x12 \ 0000003C 7F08 ANDI R16, 0xF8 \ 0000003E BB02 OUT 0x12, R16 194 PORTD |= PD_LED_SAW; \ 00000040 9A90 SBI 0x12, 0x00 195 } 196 } \ ??show_mode_sw_3: \ 00000042 9189 LD R24, Y+ \ 00000044 9199 LD R25, Y+ \ 00000046 9508 RET Но это в общем-то Ваши проблемы  , до тех пор, пока Вы не начнете публично их обсуждать.
Сообщение отредактировал zltigo - Dec 13 2008, 12:35
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Dec 13 2008, 12:05
|

Нечётный пользователь.
     
Группа: Свой
Сообщений: 2 033
Регистрация: 26-05-05
Из: Бровари, Україна
Пользователь №: 5 417

|
Цитата(Aesthete Animus @ Nov 12 2008, 19:09)  То есть, вы уже успели прочитать студентам курс лекций про asm, IAR, avr-gcc, CodeVision, BASCom Боже упаси! Как только начинают обучение с "курсов лекций" "по IAR", "по GCC", "по CodeVision" - всё, сливай воду. Для ознакомления с перспективами такого подхода ("... аппараты Бимена. В тех проклятых лентах, которые дали мне образование был предусмотрен спектрограф Хенслера... ... мне скажут, что мой мозг предназначен для Хенслера...") - читать Азимова, рассказз "Профессия" ( "Специальность"? В украинском переводе "Фах", кстати, я очень рад, что он был у дочери в курсе иностранной литературы). Цитата(defunct @ Nov 17 2008, 01:14)  вместо goto и метки можно воспользоваться любым оператором цикла и break, производительность от этого не пострадает. Код do { ..... if ( x ) break; .... if ( y ) break; .. } while (0); а смотреться будет, на мой взгляд красивше нагляднее. Нафиг-нафиг. Пробовал в детстве, но аллергией на goto, навязанной излишне академичными книжками, переболел. Даже с комментарием /* while(0) */ в начале возле do { всё равно плохо. Поначалу кажется - "о как красиво". А потом при модификациях вдруг цикл добавить, из которого выходить нужно - и путаница "это тот break или другой"? Итого где можно выделить в функцию и return (да, аллергии на несколько точек выхода из функции у меня тоже нет), то выделяю, пусть даже она один раз вызывается. Где обилие локальных переменных данной функции, к которым нужно обеспечить доступ в блоке, затрудняет выделение блока кода в функцию (локальных функций ведь, привет от паскаля, в стандартном С нет, а привыкать к этому расширению gcc не хочу, не так часто надо), там goto. Цитата(DSIoffe @ Nov 14 2008, 10:04)  А ссылочка от gotty очень хороша. Рекомендую всем любителям убедительных фраз. И чем она хороша? Агрессии не меньше, чем в этой теме. Правильные слова - правильны как-то независимо от языка. Пример про "на паскале вы НЕ МОЖЕТЕ такого написать" - ну извините. Если у кого-то поведение зависит от того, стоит ли рядом кто-то, кто НЕ РАЗРЕШАЕТ гадить где ешь - то это его личные проблемы. Точно так же можно ругать какой-то естественный человеческий язык за многообразие конструкций и оттенков (их ещё и понять может быть тяжело человеку, плохо знающему этот язык! он же ещё и жидкость для ухода за кожаными кошельками может на щёки себе натереть!!!). На человеческом языке поэты могут писать стихи, основанные на игре звучания слов практически без какого-либо смысла, учёные могут писать сложные тексты, непонятные школьникам (ничего, подучатся и поёмут, если захотят, зато между учёными коммуникация эффективнее, чем если бы они пытались писать "понятно для всех"), а можно и ругательства на стенах баллончиком с краской писать. Давайте запретим эти языки, как "растлевающие малолетних". Там правильно в начале сказано про Цитата проблему нехватки квалифицированных специадистов с "правильно поставленными мозгами" - но это проблема не "использования языка С", а обучения им пользоваться, так же как и обписанные да обписянные подъезды - проблема не человеческого языка как такового. Более того, там же сказано (стр. 6) Цитата даже если школьники прошли какие-то школьные курсы ... "постановка мозгов" им в школе (за редкими исключениями) нередко оказывается выполненной настолько неправильно ... , что послежствия ощущаются годы - а ведь в школе не С и не С++ дают, а Паскаль. Значит - не панацея и даже не облегчает ничего. Кстати, как вам конструкция "за редкими исключениями нередко оказывается" - я об неё споткнулся. Может, автору надо изучить вместо русского какой-то другой язык? В котором "он НЕ МОЖЕТ такого написать"? Или "за редким исклдючением" касалось слов "в школе" а не "оказывается выполненной"? Что касается паскаля... Язык как язык. Можно и на нём закрутить нерабочий текст с трудно отыскиваемыми ошибками. Можно и на нём работать в малых объёмах (да какая-то мега128 с внешней ОЗУ-шкой и тем более ARM имеют ресурсов больше, чем "Robotron-1715" на Z80 с CP/M и паскалем или чем "Электроника-60"/"ДВК-2", для которых тоже на паскале писалось). Ну если иметь подходящий компилятор. А если их нет - то хоть в ООН жалуйся на маркетологов и издательства, которые "служат усилителем", легче не станет. Писал когда-то парень по соседству для "Электроники-60" на паскале интерпертатор языка управления лабораторной установкой с КАМАК-ом. Насколько я помню, треть программы - асмовые вставки, и не только в кусках обмена с аппаратурой. Но "самый верх" - на паскале довольно красивый получалося. А когда я выбирал для себя на чём более-менее окончательно остановиться, я пописал немного и на паскале, и на С, посравнивал генерируемый код. У паскаля он был гораздо страшнее. Особых оптимизаций тогда не на чём было делать, а С оказался гораздо ближе к реальным процессам. Убедился, что на С мне в большинстве случаев удастся обойтсиь без асм-вставок (он их и не позволял), а если вдруг таки надо будет - то одну-две подпрограммы на ассемблере просто напишу. Вот и всего выбора. begin/end на него вообще не повлияли :-) Сейчас у дочери в школе паскаль - ну и нормально. Главное что не бейсик, как в предыдущей. Может даже лучше, что не С - весь С всё равно не дадут, а с укороченного подмножества потом переучиваться может оказаться труднее, как совсем новое пойдёт органичнее. Показал и как множествами пользоваться, и вложенными функциями (почему-то в школе это опустили).
--------------------
Ну, я пошёл… Если что – звоните…
|
|
|
|
|
Dec 13 2008, 15:02
|

Нечётный пользователь.
     
Группа: Свой
Сообщений: 2 033
Регистрация: 26-05-05
Из: Бровари, Україна
Пользователь №: 5 417

|
Цитата(777777 @ Dec 8 2008, 15:35)  Неповоротливость, как и гибкость, зависят только от языка, но никак не от компилятора. Почему, например, для перевда буквы в нижний регистр нельзя просто установить бить 0x40, как в Си (c |= 0x40), а надо сначала получить код символа, выполнить с ним арифметическую операцию, а потом преобразовать опять в символ? Ну, вообще говоря, и на С часто (и правильно) рекомендуется делать это через ctype.h tolower(), а не врукопашную битиками жоглировать. Цитата(Aesthete Animus @ Dec 13 2008, 16:50)  В тех моих словах должно было звучать бурлеско... ф-ф-ф-ф-фуууухххх... Цитата(ARV @ Dec 10 2008, 10:17)  P.S. Во времена популярности Turbo C и Turbo Pascal неоднократно раскручивал "Сишников" (я тогда был студентом-адептом паскаля) на тест: экзешник хелловорда на паскале всегда получался на 12-15 килобайт меньше, чем на паскале  а заполнение экрана посимвольно всегда завершалось быстрее, чем при сишной реализации. и это повергало Сишников (стаж работы годы против моих студенческих дней) в уныние, которое они "обоснованно" (при помощи Тurbo Debugger-а) доказывали тем, что printf Cи использует "стандартную" функцию MS DOS для вывода на дисплей, а "нестандартный паскаль" напрямую через прерывание BIOS действует.  не правда ли, все это вызывает смех сейчас, когда хелловорд на любом языке перевалил за сотню килобайт и на трехгигагерцовом пне запускается порой 1,5 секунды  1) как это на 12-15 ??? На паскале занимало минус 6-9 килобайт? Специально достал старючий компакт и развернул TURBOC20 Код #include <stdio.h>
int main() { printf("Hello, %s!\n", "world"); return 0; } >tcc -mt h.c >dir h.exe Код 13.12.2008 16:36 6 548 H.EXE Кстати, mingw32-gcc даёт файл 6144 байт. 2) Нестандартность вывода через биос приводит к тому, что в принципе вроде бы и консольная программа, а вывод в файл не перенаправить. Приходилось print screen делать. в качестве стёба - теперь я знаю, кто мне присылает скриншоты выдачи avreal вместо перенаправленного в файл вывода - привыкшие к этому на турбопаскальных программахНо если очень хотелось, то и на турбо-С можно было работать через биос Код #include <conio.h>
int main() { сprintf("Hello, %s!\n", "world"); return 0; } Код 13.12.2008 16:48 6 098 H1.EXE Это при всех стандартных действиях. А если одну заглушку поставить, это надо где-то по старым исходникам глянуть, то в программах, не пользующихся некоторыми вещами из стандартной библиотеки можно было раза в два меньше получить для программы, выполняющей реальную работу.
--------------------
Ну, я пошёл… Если что – звоните…
|
|
|
|
|
Dec 13 2008, 15:37
|
Гуру
     
Группа: Участник
Сообщений: 3 928
Регистрация: 28-03-07
Из: РФ
Пользователь №: 26 588

|
Цитата(zltigo @ Dec 13 2008, 11:16)  Ну так и отрывались-бы там вместе. Вместо этого начинаете выказывать глупость в местах, где ее способны оценить по "достоинству". Это не моя "глупость". К сожалению. Но шарж этот на си весьма нравится. Цитата(zltigo @ Dec 13 2008, 11:16)  Вы многе еще чего "считаете", причем совершенно догматично-безосновательно  . Только не безосновательно, а бездоказательно - приводить здесь какие-то доказательства - пустая трата времени. Зевак (или жевак) выше хорошо про это написал. А вот основания "считать" как раз есть - личный опыт. И я ему верю, исходя из личного опыта ))) Цитата(ReAl @ Dec 13 2008, 12:05)  если иметь подходящий компилятор. А если их нет - то хоть в ООН жалуйся на маркетологов и издательства, которые "служат усилителем", легче не станет. Зачем же в ООН. Компилятор паскаля не на много сложнее хорошего программатора
|
|
|
|
|
Dec 13 2008, 15:47
|

Местный
  
Группа: Свой
Сообщений: 222
Регистрация: 9-06-07
Пользователь №: 28 317

|
Цитата(Огурцов @ Dec 13 2008, 18:37)  Это не моя "глупость". К сожалению. Но шарж этот на си весьма нравится. Гыгыгы... Вам сюда: http://www.ioccc.org/main.html :-D Вот только подобное не имеет отношение к программированию на Си. Писать такой код, подобно пайке при включенном питании, то есть тому, за что сиюжеминутно следует отрывать руки.
|
|
|
|
|
Dec 13 2008, 16:06
|

Нечётный пользователь.
     
Группа: Свой
Сообщений: 2 033
Регистрация: 26-05-05
Из: Бровари, Україна
Пользователь №: 5 417

|
Цитата(ARV @ Dec 11 2008, 12:57)  ок. можем переиграть условия. вот код, 1 в 1 аналогичный предложенному "другими" людьми: Код var c : char; begin repeat read(c); write(c); until c = #$0d; end. размер exe-шника из-под Delphi7 15360 байт. скажите, не говорит ли это о том, что результат из-под Паскаля как минимум не хуже Сишного ни по размеру итогового файла. ни по скорости его исполнения? А как там с переносимостью/ошибкоустойчивостью с указанием явной константы вместо символа конца строки?  А то как ch |= 0x40, так надо locase()/tolower(), а тут уже можно #$0d вместо '\n' ? Аналог предыдущего с ограничением длины строки Код #include <stdio.h>
int main() { char buf[32]; fgets(buf, 31, stdin); puts(buf); return 0; } mingw32-gcc - 6144 байта. О полной идентичности работы говорить тяжело - с перенаправлением в любом случае можно на вход получить файл вместо консоли и при этом while( putchar(getchar()) != '\n' ) ; (независимо от того, написано так или как ранее с промежуточной переменной и do {} while ) будет работать некорректно в случае файла, не содержащего '\n' - застрянет в вечном цикле. Что она и делает. И паскальская (BP7, других нет) тоже, только она ещё и по Ctrl-C не снимается, в отличие от С-шной.Цитата(ARV @ Dec 11 2008, 12:57)  P.S. самое странное, что действительно, при этом коде вывродится 2 строки, как у gotty! если поначалу я подозревал, что тут какой-то подвох с его стороны, то теперь я сам не понимаю. как это возможно... судя по всему, дело в буфферизации ввода-вывода ОС... однако, это по-моему, странно  консоль традиционно построчно-буферизованная.
--------------------
Ну, я пошёл… Если что – звоните…
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|