Есть много способов отследить и убедиться в этом. Как правило, игнорируемые по причине того, что код -- одноразовый. Написал и забыл, редактируется настолько редко, что нагораживание защит вокруг дороже обойдётся.
Лучший способ в данном конкретном случае (и всех аналогичных) -- использовать статический анализатор, который может поймать косвенно (как в статье) по использованию, или попытаться "догадаться" что массивы должны быть 1-в-1 с enum'ом.
Я удивлён, кстати ( @Andrey2008 ), что PVS-Studio не догадывается что это дескриптор для ENUMа и не проверяет на равенство элементов и порядка констант унутре. А ведь косяк в таких массивах часто получается из-за потерянной запятой.
В случае нулевого void'а -- ptr не изменяется. В случае void'а считаемого в 1 байт -- ptr указывает на середину теперь.
Да, можно делать через касты:
ptr = (void*)((char *)ptr + 50);
Но это может поломать имеющийся код. Хотя в чем проблема просто ругаться на арифметику с void'ами не только под -Wpedantic -- не представляю. Скорее всего, лень.
А что это всё за Dolby расширения? Сколько я их не вижу, особого понту не слышу. Ну да, "увеличивает глубину" (а-ля дешевые колонки с "3D усилением")... Но по сути -- портят исходный звук.
В музыке? Слушаешь совсем не то, что задумал автор.
В играх? Для реакции "что-то произошло" разницы нет. Для ориентации по звуку -- не похоже, чтобы помогало.
Так и что же это -- бескислородная медь или грааль?
Я прочитал пост, да. Просто перевод статьи "как оно" был бы интереснее, нежели простой мануал "закоротите эти ноги и залейте этот файл". Более хабратортно :)
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.
Есть много способов отследить и убедиться в этом. Как правило, игнорируемые по причине того, что код -- одноразовый. Написал и забыл, редактируется настолько редко, что нагораживание защит вокруг дороже обойдётся.
Лучший способ в данном конкретном случае (и всех аналогичных) -- использовать статический анализатор, который может поймать косвенно (как в статье) по использованию, или попытаться "догадаться" что массивы должны быть 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.
Я так понимаю, всё ради удобства.
В случае нулевого void'а -- ptr не изменяется. В случае void'а считаемого в 1 байт -- ptr указывает на середину теперь.
Да, можно делать через касты:
Но это может поломать имеющийся код. Хотя в чем проблема просто ругаться на арифметику с void'ами не только под
-Wpedantic-- не представляю. Скорее всего, лень.А что это всё за Dolby расширения? Сколько я их не вижу, особого понту не слышу. Ну да, "увеличивает глубину" (а-ля дешевые колонки с "3D усилением")... Но по сути -- портят исходный звук.
В музыке? Слушаешь совсем не то, что задумал автор.
В играх? Для реакции "что-то произошло" разницы нет. Для ориентации по звуку -- не похоже, чтобы помогало.
Так и что же это -- бескислородная медь или грааль?
Я бы очень хотел взглянуть на пример теста, который может "приводить к результату void"...
Ну то есть тест нормальный, но внезапно овойдивается.
Так а в чем была разница в тех 50 тестах которые так и не починились сразу? Неужто не интересно?
Подозреваю, что еще требуется иногда, о-боже-мой, обновлять OS и IDE, где тоже что-то постоянно меняется... Ужас.
А вам сложно выучить новое слово?
Я прочитал пост, да. Просто перевод статьи "как оно" был бы интереснее, нежели простой мануал "закоротите эти ноги и залейте этот файл". Более хабратортно :)
Вот, вот это стоило перевести и зопилить!
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
И смотрим внутрь:
{dup}
http://bitsavers.informatik.uni-stuttgart.de/pdf/borland/Turbo_Vision_Version_2.0_Programming_Guide_1992.pdf
https://fossies.org/linux/rhtvision/examples/tutorial/tvguid09.cc
И еще http://www.faqs.org/faqs/C++-faq/turbovision/tvplus/part1/
который, вроде, вышел в 91м