Помогает проверить софтверные проекты на предмет переносимости. Поясню на примере. Скажем, возьмём симулятор БЭСМ-6 dubna и попробуем собрать его на Олинуксино, то есть архитектура arm32.
Другое место в том же проекте:
Таких хитростей обнаруживается немного, и они некритичные, но их полезно периодически вычищать. Улучшается качество кода.
Тут задействован нестандартный тип __int128. Он имеется и в GCC и в CLANG, но только для 64-битных процессоров.$ make
[ 3%] Building CXX object CMakeFiles/simulator.dir/arithmetic.cpp.o
arithmetic.cpp: In member function ‘void Processor::arith_multiply(Word)’:
arithmetic.cpp:256:5: error: expected primary-expression before ‘__int128’
256 | __int128 result = (__int128)acc.mantissa * word.mantissa;
| ^~~~~~~~
Другое место в том же проекте:
Потому что тип ssize_t здесь имеет тот же размер, что и unsigned int, и они конфликтуют.[ 3%] Building CXX object CMakeFiles/simulator.dir/disk.cpp.o
disk.cpp: In member function ‘void Disk::memory_to_simh(unsigned int, unsigned int, unsigned int, unsigned int)’:
disk.cpp:194:48: error: comparison of integer expressions of different signedness: ‘ssize_t’ {aka ‘int’} and ‘unsigned int’ [-Werror=sign-compare]
194 | if (write(file_descriptor, source, nbytes) != nbytes)
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~
Таких хитростей обнаруживается немного, и они некритичные, но их полезно периодически вычищать. Улучшается качество кода.

no subject
Date: 2024-12-05 23:32 (UTC)no subject
Date: 2024-12-05 23:40 (UTC)потом приходилось с болью (полезной, впрочем!) свои привычки ломать ;)
no subject
Date: 2024-12-05 23:42 (UTC)