Перейти к содержанию
    

Знаток си defunct мог бы для приличия скомпилить свой код под gcc, например, для avr, а потом то же самое переложить на if и скомпилить еще раз. И удивиться. И больше никогда дурацкий сишний switch не юзать.

Мимо кассы. Какое отношение конкретный компилятор имеет к возможностям языка?

 

Все равно, что сказать - возьмите паскаль компайлер от микроэлектроника и попробуйте сложить два "real" аргумента. И протащиться удивиться от результата. И больше никогда дурацкий паскалевский REAL не юзать.

 

А потом турбопаскаль научился раздельной компиляции. И Борманд ;) придумал библиотеку типа теперешнего VCL, только в текстовом режиме работала.

TurboVision. У меня по ней книжка до сих пор валяется. Классная вещь была - красиво построена.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

просто для вас ламер - это тот, кто не с вами, вот и все. знаем таких, проходили в школе. не хватает лишь лозунга "бей паскальников!"

Не, не так, нужно еще добавить для порядку "бей паскальников, спасай Россию!" :lol:

 

 

Это реально привлекло в программировние людей, многие из которых стали ламерами

Не, я бы сказал, ламерами не становятся, ламерами рождаются.

 

 

поскольку на расплодившихся ламеров обратили свое внимание и другие более крутые фирмы и забрали их к себе

В общем, обида, видимо, в том, что на умненьких, беленьких и пушистеньких сишников никто не обращает внимание и к себе не забирает. А я вот вам таки скажу, какой язык программирования самый правильный - идите на job.ru и смотрите цены. Я надеюсь никто из присутствующих не будет спорить с тем, в каком месте находится си/встраиваемый си ?

 

 

Мимо кассы. Какое отношение конкретный компилятор имеет к возможностям языка?

Утверждаете, что GCC - плохой компилятор ?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Утверждаете, что GCC - плохой компилятор ?

Нет, gcc хороший компилятор плюс еще и бесплатный, но он имеет и недостатки. Для AVR - это например неэффективная с т.з. быстродейтсвия организация стека и как раз неэффективная генерация кода для switch. Однако, есть компиляторы более эффективно справляющиеся с оператором switch - VS, RVDS, IAR... Может лучше их асм код посмотрим?

 

Эффективность и правильность работы Real операндов ведь тоже не зависит от языка, это проблема конкретного компилятора.

 

По оператору варианта. Паскаль не дает возможности выполнения множества вариантов, C - дает.

Вы языки хотели сравнить или компиляторы?

 

Если первое - тогда почему просто не примете факт - по оператору варианта Паскаль слил?

Есои второе - так скажите наконец - где же взять эффективный компилятор Pascal для AVR? ;>

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Если первое - тогда почему просто не примете факт - по оператору варианта Паскаль слил?

Ничуть, все легко и красиво реализуется на if - не надо без необходимости умножать сущности (с). А вот си слил свой switch по скорости. И если вы не понимаете, почему, почитайте про case самостоятельно. Я скажу более, для МК паскалевский case - самое то. А сишный switch, если вы хотите сказать про его "дополнительные" возможности - красиво заложенные в код грабли.

 

зы: про компиляторы - смотрите ссылку, которую дали выше, _самостоятельно_

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ничуть, все легко и красиво реализуется на 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()

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Огурцов продолжает нести пургу

Ничуть, проверено, как и сказал выше на WinAVR-GCC. Вообще, считаю его хорошим компилятором, поэтому всякие "но он имеет и недостатки" не катят. Особенно в форуме AVR/PIC.

Ну а про остальное - вам тоже нужно объяснять чем case от if/switch отличается ? Грустно.

 

Ссылки на компилеры: (сейчас e-lab стащу)

 

http://e-lab.de/index_en.html

 

Embedded Pascal for the AVR http://users.iafrica.com/r/ra/rainier/pasavr.exe

 

MikroElektronika 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 ...............

 

comics15d.gif

Изменено пользователем Огурцов

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Во, ребята отрываются )

Ну так и отрывались-бы там вместе. Вместо этого начинаете выказывать глупость в местах, где ее способны оценить по "достоинству".

 

 

Вообще, считаю его хорошим компилятором....

Вы многе еще чего "считаете", причем совершенно догматично-безосновательно :(.

    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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

То есть, вы уже успели прочитать студентам курс лекций про asm, IAR, avr-gcc, CodeVision, BASCom
Боже упаси!

Как только начинают обучение с "курсов лекций" "по IAR", "по GCC", "по CodeVision" - всё, сливай воду. Для ознакомления с перспективами такого подхода ("... аппараты Бимена. В тех проклятых лентах, которые дали мне образование был предусмотрен спектрограф Хенслера... ... мне скажут, что мой мозг предназначен для Хенслера...") - читать Азимова, рассказз "Профессия" ( "Специальность"? В украинском переводе "Фах", кстати, я очень рад, что он был у дочери в курсе иностранной литературы).

 

 

вместо goto и метки можно воспользоваться любым оператором цикла и break, производительность от этого не пострадает.

 

do
{
     .....
     if ( x ) break;
     ....
     if ( y ) break;
     ..
} while (0);

 

а смотреться будет, на мой взгляд красивше нагляднее.

Нафиг-нафиг. Пробовал в детстве, но аллергией на goto, навязанной излишне академичными книжками, переболел. Даже с комментарием /* while(0) */ в начале возле do { всё равно плохо. Поначалу кажется - "о как красиво". А потом при модификациях вдруг цикл добавить, из которого выходить нужно - и путаница "это тот break или другой"?

Итого где можно выделить в функцию и return (да, аллергии на несколько точек выхода из функции у меня тоже нет), то выделяю, пусть даже она один раз вызывается.

Где обилие локальных переменных данной функции, к которым нужно обеспечить доступ в блоке, затрудняет выделение блока кода в функцию (локальных функций ведь, привет от паскаля, в стандартном С нет, а привыкать к этому расширению gcc не хочу, не так часто надо), там goto.

 

 

 

А ссылочка от gotty очень хороша. Рекомендую всем любителям убедительных фраз.
И чем она хороша? Агрессии не меньше, чем в этой теме. Правильные слова - правильны как-то независимо от языка.

Пример про "на паскале вы НЕ МОЖЕТЕ такого написать" - ну извините. Если у кого-то поведение зависит от того, стоит ли рядом кто-то, кто НЕ РАЗРЕШАЕТ гадить где ешь - то это его личные проблемы.

Точно так же можно ругать какой-то естественный человеческий язык за многообразие конструкций и оттенков (их ещё и понять может быть тяжело человеку, плохо знающему этот язык! он же ещё и жидкость для ухода за кожаными кошельками может на щёки себе натереть!!!). На человеческом языке поэты могут писать стихи, основанные на игре звучания слов практически без какого-либо смысла, учёные могут писать сложные тексты, непонятные школьникам (ничего, подучатся и поёмут, если захотят, зато между учёными коммуникация эффективнее, чем если бы они пытались писать "понятно для всех"), а можно и ругательства на стенах баллончиком с краской писать. Давайте запретим эти языки, как "растлевающие малолетних".

Там правильно в начале сказано про

проблему нехватки квалифицированных специадистов с "правильно поставленными мозгами"
- но это проблема не "использования языка С", а обучения им пользоваться, так же как и обписанные да обписянные подъезды - проблема не человеческого языка как такового. Более того, там же сказано (стр. 6)
даже если школьники прошли какие-то школьные курсы ... "постановка мозгов" им в школе (за редкими исключениями) нередко оказывается выполненной настолько неправильно ... , что послежствия ощущаются годы
- а ведь в школе не С и не С++ дают, а Паскаль. Значит - не панацея и даже не облегчает ничего.

Кстати, как вам конструкция "за редкими исключениями нередко оказывается" - я об неё споткнулся.

Может, автору надо изучить вместо русского какой-то другой язык? В котором "он НЕ МОЖЕТ такого написать"? Или "за редким исклдючением" касалось слов "в школе" а не "оказывается выполненной"?

 

Что касается паскаля... Язык как язык.

Можно и на нём закрутить нерабочий текст с трудно отыскиваемыми ошибками.

Можно и на нём работать в малых объёмах (да какая-то мега128 с внешней ОЗУ-шкой и тем более ARM имеют ресурсов больше, чем "Robotron-1715" на Z80 с CP/M и паскалем или чем "Электроника-60"/"ДВК-2", для которых тоже на паскале писалось). Ну если иметь подходящий компилятор. А если их нет - то хоть в ООН жалуйся на маркетологов и издательства, которые "служат усилителем", легче не станет.

 

Писал когда-то парень по соседству для "Электроники-60" на паскале интерпертатор языка управления лабораторной установкой с КАМАК-ом. Насколько я помню, треть программы - асмовые вставки, и не только в кусках обмена с аппаратурой. Но "самый верх" - на паскале довольно красивый получалося. А когда я выбирал для себя на чём более-менее окончательно остановиться, я пописал немного и на паскале, и на С, посравнивал генерируемый код. У паскаля он был гораздо страшнее. Особых оптимизаций тогда не на чём было делать, а С оказался гораздо ближе к реальным процессам.

Убедился, что на С мне в большинстве случаев удастся обойтсиь без асм-вставок (он их и не позволял), а если вдруг таки надо будет - то одну-две подпрограммы на ассемблере просто напишу. Вот и всего выбора. begin/end на него вообще не повлияли :-)

 

Сейчас у дочери в школе паскаль - ну и нормально. Главное что не бейсик, как в предыдущей. Может даже лучше, что не С - весь С всё равно не дадут, а с укороченного подмножества потом переучиваться может оказаться труднее, как совсем новое пойдёт органичнее.

Показал и как множествами пользоваться, и вложенными функциями (почему-то в школе это опустили).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Боже упаси!

Как только начинают обучение с "курсов лекций" "по IAR", "по GCC", "по CodeVision" - всё, сливай...

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Неповоротливость, как и гибкость, зависят только от языка, но никак не от компилятора. Почему, например, для перевда буквы в нижний регистр нельзя просто установить бить 0x40, как в Си (c |= 0x40), а надо сначала получить код символа, выполнить с ним арифметическую операцию, а потом преобразовать опять в символ?
Ну, вообще говоря, и на С часто (и правильно) рекомендуется делать это через ctype.h tolower(), а не врукопашную битиками жоглировать.

 

 

 

В тех моих словах должно было звучать бурлеско...
ф-ф-ф-ф-фуууухххх...

 

 

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

Это при всех стандартных действиях. А если одну заглушку поставить, это надо где-то по старым исходникам глянуть, то в программах, не пользующихся некоторыми вещами из стандартной библиотеки можно было раза в два меньше получить для программы, выполняющей реальную работу.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ну так и отрывались-бы там вместе. Вместо этого начинаете выказывать глупость в местах, где ее способны оценить по "достоинству".

Это не моя "глупость". К сожалению. Но шарж этот на си весьма нравится.

 

Вы многе еще чего "считаете", причем совершенно догматично-безосновательно :(.

Только не безосновательно, а бездоказательно - приводить здесь какие-то доказательства - пустая трата времени. Зевак (или жевак) выше хорошо про это написал. А вот основания "считать" как раз есть - личный опыт. И я ему верю, исходя из личного опыта )))

 

 

если иметь подходящий компилятор. А если их нет - то хоть в ООН жалуйся на маркетологов и издательства, которые "служат усилителем", легче не станет.

Зачем же в ООН. Компилятор паскаля не на много сложнее хорошего программатора ;)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Это не моя "глупость". К сожалению. Но шарж этот на си весьма нравится.

Гыгыгы... Вам сюда: http://www.ioccc.org/main.html :-D

Вот только подобное не имеет отношение к программированию на Си. Писать такой код, подобно пайке при включенном питании, то есть тому, за что сиюжеминутно следует отрывать руки.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вот только подобное не имеет отношение к программированию на Си.

Имеет, имеет. И даже обфускаторы для этого не нужны )

Или можете привести такое же для паскаля ? Давайте, вместе посмеемся.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

ок. можем переиграть условия. вот код, 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 не снимается, в отличие от С-шной.

 

 

P.S. самое странное, что действительно, при этом коде вывродится 2 строки, как у gotty! если поначалу я подозревал, что тут какой-то подвох с его стороны, то теперь я сам не понимаю. как это возможно... судя по всему, дело в буфферизации ввода-вывода ОС... однако, это по-моему, странно :(
консоль традиционно построчно-буферизованная.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Посмотрел компиляторы по ссылкам выше.

 

Embedded Pascal for the AVR - похоже, старенький, сыренький и к тому же мертвенький.

e-lab - довольно большой дистрибутив, а возможности не очень впечатлили, и какой-то заморочный, требует напряга. Разбирайтесь сами.

MikroElektronika Advanced Pascal Compiler for AVR - ничотак, на первый взгляд все по уму, вполне может быть взять за отправную точку.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...