powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Странный код
25 сообщений из 52, страница 2 из 3
Странный код
    #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
25 сообщений из 52, страница 2 из 3
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Странный код
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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