Pull to refresh
234
0
Anton Fedorov @datacompboy

Программист / сисадмин (Sr. SRE)

Send message

А это толком и не отследить

Есть много способов отследить и убедиться в этом. Как правило, игнорируемые по причине того, что код -- одноразовый. Написал и забыл, редактируется настолько редко, что нагораживание защит вокруг дороже обойдётся.

Лучший способ в данном конкретном случае (и всех аналогичных) -- использовать статический анализатор, который может поймать косвенно (как в статье) по использованию, или попытаться "догадаться" что массивы должны быть 1-в-1 с enum'ом.

Я удивлён, кстати ( @Andrey2008 ), что PVS-Studio не догадывается что это дескриптор для ENUMа и не проверяет на равенство элементов и порядка констант унутре. А ведь косяк в таких массивах часто получается из-за потерянной запятой.

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

Причем, если к последней определённой константе строка есть -- пропущенные в середине countof() не поймает.

Ссылки на статью не будет, только 50 ссылок на телегу? И ссылка "на источник" только для галочки?

Объект характеризуется не только данными, но и адресом данных.

а какой адрес у регистра ecx ?

Да, это "расширение" стандарта как они считают.

В коде это вот тут: https://github.com/gcc-mirror/gcc/blob/885143fa77599c44bfdd4e8e6b6987b7824db6ba/gcc/c-family/c-common.cc#L3378

Прошелся по истории, появилось это в
https://gcc.gnu.org/git/?p=gcc.git;a=commit;f=gcc/cp/typeck.c;h=8d08fdba598cf87c3794df53beae1026345ebb02

То есть это еще с 1994го года, со времён свинины... "From-SVN: r6613"

https://gcc.gnu.org/onlinedocs/gcc/Pointer-Arith.html -- и оно там с доисторических времён, возможно, даже с прошлого тысячелетия... почему?

Работает, в gcc.

Я так понимаю, всё ради удобства.

auto ptr = malloc(100);
ptr += 50;

В случае нулевого void'а -- ptr не изменяется. В случае void'а считаемого в 1 байт -- ptr указывает на середину теперь.

Да, можно делать через касты:

ptr = (void*)((char *)ptr + 50);

Но это может поломать имеющийся код. Хотя в чем проблема просто ругаться на арифметику с void'ами не только под -Wpedantic -- не представляю. Скорее всего, лень.

А что это всё за Dolby расширения? Сколько я их не вижу, особого понту не слышу. Ну да, "увеличивает глубину" (а-ля дешевые колонки с "3D усилением")... Но по сути -- портят исходный звук.

В музыке? Слушаешь совсем не то, что задумал автор.

В играх? Для реакции "что-то произошло" разницы нет. Для ориентации по звуку -- не похоже, чтобы помогало.

Так и что же это -- бескислородная медь или грааль?

Я бы очень хотел взглянуть на пример теста, который может "приводить к результату void"...

Ну то есть тест нормальный, но внезапно овойдивается.

Так а в чем была разница в тех 50 тестах которые так и не починились сразу? Неужто не интересно?

Подозреваю, что еще требуется иногда, о-боже-мой, обновлять OS и IDE, где тоже что-то постоянно меняется... Ужас.

Я прочитал пост, да. Просто перевод статьи "как оно" был бы интереснее, нежели простой мануал "закоротите эти ноги и залейте этот файл". Более хабратортно :)

У автора репозитория даже есть целый пост о том

Вот, вот это стоило перевести и зопилить!

Borland C++ & Application Frameworks 3.0 now includes the runtime library source code which is normally sold separately for $150. Borland C++ & Application Frameworks 3.0 has a suggested retail price of $749.

https://winworldpc.com/product/borland-c/20
вот тут есть Borland CPP 2.0 and Application Frameworks (5.25-1.2mb) -- да, внутри есть турбовижн.

... датированный Августом 1991го.

а в 3.0 -- датировка 92м.

Кто таки был в сях от 90го? где?

Похоже, что в паскале с 90го, а в с++ с 91го -- по крайней мере, релиза за 90й я не нашел.

Не я писал :)

Моя память не сохранила этих деталей.

Однако же книга по турбовижину вышла в 1990м.
https://www.booklooker.de/Bücher/kolektiv+Turbo-Pascal-Turbo-Vision-Guide/id/A02FfpUL01ZZd?zid=54or1er5j13gaomc3fsm5caa7d

А вот сам турбо поскакаль 6.0 от 1990 года: https://winworldpc.com/download/c3985bc3-894b-25c3-8511-c3a6e280947e

И смотрим внутрь:

~/Downloads/Borland Turbo Pascal 6.0 (10-23-1990) (3.5-720k)$ ls disk01
INSTALL.EXE  INTRFACE.ZIP  README  README.COM  TOUR.ZIP  TURBO.ZIP  TURBO3.ZIP  TVDEMOS.ZIP  TVISION.ZIP  UNZIP.EXE
~/Borland Turbo Pascal 6.0 (10-23-1990) (3.5-720k)$ ls disk02
BGI.ZIP  DEMOS.ZIP  DOCDEMOS.ZIP  HELP.ZIP  ONLINE.ZIP  TCALC.ZIP  UTILS.ZIP
~/Downloads/Borland Turbo Pascal 6.0 (10-23-1990) (3.5-720k)$ unzip -l disk01/TVISION.ZIP 
Archive:  disk01/TVISION.ZIP
  Length      Date    Time    Name
---------  ---------- -----   ----
    13434  1990-10-23 06:00   APP.PAS
     3338  1990-10-23 06:00   BUFFERS.PAS
    20305  1990-10-23 06:00   COLORSEL.PAS
    45718  1990-10-23 06:00   EDITORS.PAS
     5432  1990-10-23 06:00   MSGBOX.PAS
    36839  1990-10-23 06:00   STDDLG.PAS
     9568  1990-10-23 06:00   APP.TPU
     1568  1990-10-23 06:00   BUFFERS.TPU
    14752  1990-10-23 06:00   COLORSEL.TPU
    27536  1990-10-23 06:00   DIALOGS.TPU
    10512  1990-10-23 06:00   DRIVERS.TPU
    27744  1990-10-23 06:00   EDITORS.TPU
     1728  1990-10-23 06:00   HISTLIST.TPU
     1712  1990-10-23 06:00   MEMORY.TPU
    16352  1990-10-23 06:00   MENUS.TPU
     3008  1990-10-23 06:00   MSGBOX.TPU
    20752  1990-10-23 06:00   OBJECTS.TPU
    24880  1990-10-23 06:00   STDDLG.TPU
     5120  1990-10-23 06:00   TEXTVIEW.TPU
    43568  1990-10-23 06:00   VIEWS.TPU
---------                     -------
   333866                     20 files
~/Downloads/Borland Turbo Pascal 6.0 (10-23-1990) (3.5-720k)$ head tvision/APP.PAS 

{*******************************************************}
{                                                       }
{       Turbo Pascal Version 6.0                        }
{       Turbo Vision Unit                               }
{                                                       }
{       Copyright (c) 1990 Borland International        }
{                                                       }
{*******************************************************}

Information

Rating
Does not participate
Location
Zürich, Zürich, Швейцария
Date of birth
Registered
Activity

Specialization

Specialist
Lead