powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Странный код
52 сообщений из 52, показаны все 3 страниц
Странный код
    #39923227
jenya7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Разбираюсь с одним модулем. Под него есть готовые библиотеки. Наткнулся на такой код
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
int16_t SPI_WIFI_ReceiveData(uint8_t *pData, uint16_t len, uint32_t timeout)
{
    int16_t length = 0;
    uint8_t tmp[2];

    while (WIFI_IS_CMDDATA_READY())
    {
         if((length < len) || (!len))
        {
            HAL_SPI_Receive_IT(&hspi, tmp, 1);
            pData[0] = tmp[0];
            pData[1] = tmp[1];
            length += 2;
            pData  += 2;
        } 
    }
 }



онии продвигают указатель
pData += 2;
но данные кладут всегда в начальные индексы
pData[0] = tmp[0];
pData[1] = tmp[1];

я что то не понимаю? по моему должно быть так
*pData++ = tmp[0];
*pData++ = tmp[1];
...
Рейтинг: 0 / 0
Странный код
    #39923253
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Насколько я понимаю, в "странном" коде единственный инкремент, а в вашем - два. Одна лишняя операция.
...
Рейтинг: 0 / 0
Странный код
    #39923260
jenya7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Basil A. Sidorov
Насколько я понимаю, в "странном" коде единственный инкремент, а в вашем - два. Одна лишняя операция.


pData += 2; не равно pData++; pData++; ?

array[index] - указывает на абсолютный адрес (?)
если мы продвинем указатель array += 2 - то array[0] - это не будет array[0+2].
...
Рейтинг: 0 / 0
Странный код
    #39923266
Фотография crutchmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jenya7
pData += 2; не равно pData++; pData++; ?

Нет. Это же две инструкции вместо одной. Вот пустой tmp[2] меня напрягает. Откуда код? Ядро что-ли?
...
Рейтинг: 0 / 0
Странный код
    #39923269
Фотография crutchmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
crutchmasterЯдро что-ли?

amazon-freertos-optiga-trust
...
Рейтинг: 0 / 0
Странный код
    #39923271
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jenya7
pData += 2; не равно pData++; pData++; ?
Я где-то утверждал, что не равно?
Я сказал - "одна лишняя операции".array[index] - указывает на абсолютный адрес (?)Нет в Це Pascal-евых массивов. Есть разные формы адресной арифметики.если мы продвинем указатель array += 2 - то array[0] - это не будет array[0+2].Есть массив переменных.
Можно взять указатель на начало массива и получать нужный элемент, используя индекс.
Можно менять значение указателя и получать нужный элемент без всякого индекса. Ну или "по индексу ноль", если вам угодно.
...
Рейтинг: 0 / 0
Странный код
    #39923272
jenya7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
crutchmaster
jenya7
pData += 2; не равно pData++; pData++; ?

Нет. Это же две инструкции вместо одной. Вот пустой tmp[2] меня напрягает. Откуда код? Ядро что-ли?


int i = 0;
i+=2;
результат 2.

int i = 0;
i++;
i++;
результат 2.
...
Рейтинг: 0 / 0
Странный код
    #39923275
jenya7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Basil A. Sidorov

Можно взять указатель на начало массива и получать нужный элемент, используя индекс.
Можно менять значение указателя и получать нужный элемент без всякого индекса. Ну или "по индексу ноль", если вам угодно.

если это так то это серьезный фак в С.
...
Рейтинг: 0 / 0
Странный код
    #39923289
Фотография crutchmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jenya7
если это так то это серьезный фак в С

Нет. Жонглирование указателями, гексогеном и острыми бритвами, крутя педали одноколёсного велосипеда - обычная практика в разработке на си.
...
Рейтинг: 0 / 0
Странный код
    #39923291
Фотография crutchmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jenya7,

Одна операция, результат - 2
Две операции, результат - 2
Если нет разницы, то зачем делать больше?
...
Рейтинг: 0 / 0
Странный код
    #39923321
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jenya7
онии продвигают указатель
pData += 2;
но данные кладут всегда в начальные индексы
pData[0] = tmp[0];
pData[1] = tmp[1];

я что то не понимаю? по моему должно быть так
*pData++ = tmp[0];
*pData++ = tmp[1];

это одно и тоже, дальше дело вкуса как читабельнее написать. На вкус и цвет все фломастеры разные (с) Лично я за исходный вариант.
...
Рейтинг: 0 / 0
Странный код
    #39923331
Фотография crutchmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T,

Это не дело вкуса. Во втором варианте на операцию больше будет жи!
...
Рейтинг: 0 / 0
Странный код
    #39923335
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
crutchmaster
Dima T,

Это не дело вкуса. Во втором варианте на операцию больше будет жи!

Не факт, надо код после компиляции смотреть. +=2 это сложение, а ++ это инкремент, второе легче в выполнении и короче записывается.
Да и оптимизатор проца скорее всего запараллелит выполнение двух ++, т.е. в итоге получим примерно одно и тоже по производительности.
...
Рейтинг: 0 / 0
Странный код
    #39923338
Фотография Имя пользователя1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я может чего не понимаю, но зачем здесь tmp?

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
int16_t SPI_WIFI_ReceiveData(uint8_t *pData, uint16_t len, uint32_t timeout)
{
    int16_t length = 0;

    while (WIFI_IS_CMDDATA_READY())
    {
         if((length < len) || (!len))
        {
            HAL_SPI_Receive_IT(&hspi, pData, 1);
            length += 2;
            pData  += 2;
        } 
    }
 }
...
Рейтинг: 0 / 0
Странный код
    #39923377
jenya7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
[quot Dima T#22074549]
jenya7
онии продвигают указатель
это одно и тоже, дальше дело вкуса как читабельнее написать. На вкус и цвет все фломастеры разные (с) Лично я за исходный вариант.

исходный вариант как минимум путает. нужно держать в голове что pData[0] это уже не нулевой индекс, а первый индекс текущего указателя. выстрел в ногу может мягко перейти в выстрел в голову. :)
...
Рейтинг: 0 / 0
Странный код
    #39923457
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T
Да и оптимизатор проца скорее всего запараллелит выполнение двух ++

Это вряд ли: они зависимы. А вот два независимых присваивания он запараллелит гарантированно.

jenya7
исходный вариант как минимум путает

Только слабых на голову. Но таким в области низкоуровневой оптимизации делать нечего. Таки да, первый код работает заметно быстрее второго.
...
Рейтинг: 0 / 0
Странный код
    #39923466
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov
Dima T
Да и оптимизатор проца скорее всего запараллелит выполнение двух ++

Это вряд ли: они зависимы. А вот два независимых присваивания он запараллелит гарантированно.

это может сделать оптимизатор компилятора
...
Рейтинг: 0 / 0
Странный код
    #39923468
kolobok0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Имя пользователя1
...но зачем...


код мутный, от слова совсем.
1) есть закос на различия по платформе и дохлые компиляторы
2) нарушена общая логика в решении
3) не однозначное поведение алгоритма


индусский код одним словом...
(круглый)
...
Рейтинг: 0 / 0
Странный код
    #39923545
Фотография полудух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изопропил
Dimitry Sibiryakov
пропущено...

Это вряд ли: они зависимы. А вот два независимых присваивания он запараллелит гарантированно.

это может сделать оптимизатор компилятора

если на компилятор вешать оптимизацию, которую должен делать человек, у человека всегда будут проблемы.
...
Рейтинг: 0 / 0
Странный код
    #39923608
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А зачем там таймаут. Я полагаю можно переписать так и смысл тот-же.
+1 к tmp. Тоже убрал.
Лишние скобАчки убрал. Задлянафига нам скобАчки?
+Egyptian-style bracers. Я делаю это машинально. (Сорян привыкли руки к топорам).

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
int16_t SPI_WIFI_ReceiveData(uint8_t *pData, uint16_t len) {
    int16_t length = 0;
    while (WIFI_IS_CMDDATA_READY()) {
        if(length < len || !len) {
            HAL_SPI_Receive_IT(&hspi, pData, 1);
            length += 2;
            pData  += 2;
        } 
    }
 }



И гдеж тот господин который рекламировал PVS. Когда он нужен - его нет
...
Рейтинг: 0 / 0
Странный код
    #39923616
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jenya7
исходный вариант как минимум путает. нужно держать в голове что pData[0] это уже не нулевой индекс, а первый индекс текущего указателя. выстрел в ногу может мягко перейти в выстрел в голову. :)

По мне так все пишущие на С должны помнить как 2+2=4 что pData[1] и *(pData+1) это одно и тоже, ИМХО первая запись красивее, т.е. читабельнее, но могут быть применены обе, это не должно путать.

PS Считающие что быстрее pData+=2 учтите этот неявный +1.
...
Рейтинг: 0 / 0
Странный код
    #39923619
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Честно я-бы забил. Я чем больше смотрю на процесс разработки - тем больше уверен что correctness - важнее
чем гипотетический и недоказанный performance.

Главное - написать код без ошибок. Код который работает правильно. А оптимизации уже пойдут потом.

Кроме того интеллект компиллеров шибко крепчает и они спокойно распознают много-ходовки.
...
Рейтинг: 0 / 0
Странный код
    #39923632
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И надо еще посмотреть какие коды ошибок возвращает HAL_SPI_Receive_IT()
...
Рейтинг: 0 / 0
Странный код
    #39923634
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
полудух
если на компилятор вешать оптимизацию, которую должен делать человек, у человека всегда будут проблемы.

а должен ли?

на интеле например, давно уже i++ транслируется в ADD r,1 а не INC r

зачем мешать оптитимизатору?
...
Рейтинг: 0 / 0
Странный код
    #39923641
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я-бы переписал такой код.

Код: plaintext
1.
if(length < len || !len)



Здесь - неочевидна арифметика числовых интервалов. Ну... не в данном коде
а вообще в принципе.

Типа

Код: java
1.
len==0



Если есть возможность объединять предикаты там строгое неравенство соединить
с равенством нулю - то ябы сокращал количество предикатов.

Опять же. Не в данном коде а вообще.
...
Рейтинг: 0 / 0
Странный код
    #39923647
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Я-бы переписал такой код.

Код: plaintext
1.
if(length < len || !len)


Тут никто странного ничего не заметил? ИМХО выше оверхед нашли, а это большой косяк. Похоже точно писали криворукие товарищи.
...
Рейтинг: 0 / 0
Странный код
    #39923648
Фотография полудух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T
все пишущие на С должны помнить как 2+2=4 что pData[1] и *(pData+1) это одно и тоже

точнее даже так:
Код: plaintext
1.
a[i] => *(a + i) => *(i + a) => i[a]
...
Рейтинг: 0 / 0
Странный код
    #39923649
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
полудух, это толсто.

Кстати забавно что и арифметика указателей и арифметика строк - некоммутативны.

Можно было сразу вводить новый оператор и не мучать бедный математический плюс "+".
...
Рейтинг: 0 / 0
Странный код
    #39923651
Фотография Имя пользователя1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
полудух, это толсто.

Кстати забавно что и арифметика указателей и арифметика строк - некоммутативны.
не знаю как сейчас, но раньше в плюсах было именно так как полудух написал. Я как-то однажды об этом подумал, проверил, так и оказалось.
...
Рейтинг: 0 / 0
Странный код
    #39923652
Фотография Имя пользователя1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ещё из необычного:
Код: plaintext
1.
2.
MyClass *a = null;
a->func();



это не падало, если функция не виртуальная. Но по моему, уже в VS2003 эту анархию убрали
...
Рейтинг: 0 / 0
Странный код
    #39923653
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Имя пользователя1
mayton
полудух, это толсто.

Кстати забавно что и арифметика указателей и арифметика строк - некоммутативны.
не знаю как сейчас, но раньше в плюсах было именно так как полудух написал. Я как-то однажды об этом подумал, проверил, так и оказалось.

Я даже боюсь представить каково это было.... "раньше". Код-троллинг...
...
Рейтинг: 0 / 0
Странный код
    #39923655
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
полудух
Dima T
все пишущие на С должны помнить как 2+2=4 что pData[1] и *(pData+1) это одно и тоже

точнее даже так:
Код: plaintext
1.
a[i] => *(a + i) => *(i + a) => i[a]


Да, математически/логически верно, но здравого смысла в этом продолжении нет. Можно хоть один пример реального кода чтобы я понял что неправ.
...
Рейтинг: 0 / 0
Странный код
    #39923656
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
int16_t SPI_WIFI_ReceiveData(uint8_t *pData, uint16_t len) {
    int16_t length = 0;
    while (WIFI_IS_CMDDATA_READY()) {
        if(length < len || !len) {
            HAL_StatusTypeDef status = HAL_SPI_Receive_IT(&hspi, pData, 1);
            if (status != ST_OK) {
                // Aaaaaaa!!!!!!!!
            }
            length += 2;
            pData  += 2;
        } 
    }
 }
...
Рейтинг: 0 / 0
Странный код
    #39923658
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Имя пользователя1
ещё из необычного:
Код: plaintext
1.
2.
MyClass *a = null;
a->func();



это не падало, если функция не виртуальная. Но по моему, уже в VS2003 эту анархию убрали

Что-то путаешь. В виндовсе адреса с 0 до ... зарезервированы как раз под такие случаи, попытка читать/писать по адресу 0 вызовет исключение "обращение к несуществующей памяти", но его можно перехватить с помощью SEH, может проблема была в неправильной обработке исключений?
...
Рейтинг: 0 / 0
Странный код
    #39923659
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton, подумай над || !len
...
Рейтинг: 0 / 0
Странный код
    #39923661
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T
mayton
Я-бы переписал такой код.

Код: plaintext
1.
if(length < len || !len)



Тут никто странного ничего не заметил? ИМХО выше оверхед нашли, а это большой косяк. Похоже точно писали криворукие товарищи.

Заметил, но стерпел.
...
Рейтинг: 0 / 0
Странный код
    #39923663
Фотография OoCc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T
полудух
пропущено...

точнее даже так:
Код: plaintext
1.
a[i] => *(a + i) => *(i + a) => i[a]


Да, математически/логически верно, но здравого смысла в этом продолжении нет. Можно хоть один пример реального кода чтобы я понял что неправ.

Это легасм С. Не забываем что С - это ещё почти ассемблер, следующий шаг за MACRO11. С этой точки зрения какие бы регистры не суммировались результирующий указатель будет в регистре.
...
Рейтинг: 0 / 0
Странный код
    #39923665
Фотография OoCc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T
Имя пользователя1
ещё из необычного:
Код: plaintext
1.
2.
MyClass *a = null;
a->func();



это не падало, если функция не виртуальная. Но по моему, уже в VS2003 эту анархию убрали

Что-то путаешь. В виндовсе адреса с 0 до ... зарезервированы как раз под такие случаи, попытка читать/писать по адресу 0 вызовет исключение "обращение к несуществующей памяти", но его можно перехватить с помощью SEH, может проблема была в неправильной обработке исключений?

Это равносильно

Код: plaintext
1.
func(a)



тоесть this будет null
...
Рейтинг: 0 / 0
Странный код
    #39923666
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изопропил
Dima T
пропущено...

Тут никто странного ничего не заметил? ИМХО выше оверхед нашли, а это большой косяк. Похоже точно писали криворукие товарищи.

Заметил, но стерпел.

Ну колитесь.
...
Рейтинг: 0 / 0
Странный код
    #39923669
Фотография Имя пользователя1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
OoCc
Dima T
пропущено...

Что-то путаешь. В виндовсе адреса с 0 до ... зарезервированы как раз под такие случаи, попытка читать/писать по адресу 0 вызовет исключение "обращение к несуществующей памяти", но его можно перехватить с помощью SEH, может проблема была в неправильной обработке исключений?

Это равносильно

Код: plaintext
1.
func(a)




тоесть this будет null
да
если метод не виртуальный, то его адрес известен на момент компиляции и компилятор именно так и переписывает.
...
Рейтинг: 0 / 0
Странный код
    #39923670
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Изопропил
пропущено...

Заметил, но стерпел.

Ну колитесь.

Разверни || !len к обычному условию и все поймешь
...
Рейтинг: 0 / 0
Странный код
    #39923671
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jenya7
я что то не понимаю? по моему должно быть так
*pData++ = tmp[0];
*pData++ = tmp[1];

По-моему, должно быть примерно так:

Код: c
*((uint16_t *)pData)++ = *(uint16_t*)&tmp;

Но как человек, не писавший на C с 97-го года, могу и ошибиться.
...
Рейтинг: 0 / 0
Странный код
    #39923672
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
OoCc
Dima T
пропущено...

Что-то путаешь. В виндовсе адреса с 0 до ... зарезервированы как раз под такие случаи, попытка читать/писать по адресу 0 вызовет исключение "обращение к несуществующей памяти", но его можно перехватить с помощью SEH, может проблема была в неправильной обработке исключений?

Это равносильно

Код: plaintext
1.
func(a)



тоесть this будет null

а внутри будет обращение к свойствам, т.е. чтение по по адресу this+N, где N от 0 до ...
...
Рейтинг: 0 / 0
Странный код
    #39923675
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,

если len==0 ,то вызывается HAL_SPI_Receive_IT без проверки переполнения буфера

ХЗ, может в этом случае гарантируется, что размер буфера достаточен для получения всех данных,
WIFI_IS_CMDDATA_READY() рано или поздно скажет, что данных больше нет
...
Рейтинг: 0 / 0
Странный код
    #39923680
Фотография полудух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T
полудух
пропущено...

точнее даже так:
Код: plaintext
1.
a[i] => *(a + i) => *(i + a) => i[a]



Да, математически/логически верно, но здравого смысла в этом продолжении нет. Можно хоть один пример реального кода чтобы я понял что неправ.

я не к тому, что "не прав", а к тому, что "оно ещё и вот так умеет"
хорошо что в C++ уже открыто советуют (Herb Sutter) отказываться от арифметики указателей и юзать всякие array_view
...
Рейтинг: 0 / 0
Странный код
    #39923681
Фотография OoCc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T
OoCc
пропущено...

Это равносильно

Код: plaintext
1.
func(a)



тоесть this будет null

а внутри будет обращение к свойствам, т.е. чтение по по адресу this+N, где N от 0 до ...

С и С++ работают по принципу "программист знает что он делает". Если он так сделал значит он наверное проверил в функции this на null
...
Рейтинг: 0 / 0
Странный код
    #39923708
Фотография Relic Hunter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сложный код на С и С++ вообще не переводится ни на один язык мира. А вот наоборот пожалуйста.
...
Рейтинг: 0 / 0
Странный код
    #39923710
Фотография полудух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
так нигде же больше нет указателей?
...
Рейтинг: 0 / 0
Странный код
    #39923720
Фотография crutchmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
И гдеж тот господин который рекламировал PVS

Пивас студия и сюда добралась?
...
Рейтинг: 0 / 0
Странный код
    #39923747
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Одно время он был очень активен.
...
Рейтинг: 0 / 0
Странный код
    #39923851
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати самый первый варнинг который выдал cppcheck - это неиспользование результата функции HAL_SPI_Receive_IT.
...
Рейтинг: 0 / 0
Странный код
    #39923888
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Кстати самый первый варнинг который выдал cppcheck - это неиспользование результата функции HAL_SPI_Receive_IT.

Оно не должно компилироваться без return. Я так понимаю там часть кода вырезана.
...
Рейтинг: 0 / 0
52 сообщений из 52, показаны все 3 страниц
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Странный код
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]