#c
#c
Вопрос:
Я задаю этот вопрос, потому что в gfortran есть супер удобная опция компилятора, особенно при работе с устаревшим программным обеспечением:
gfortran -finit-real=snan
https://gcc.gnu.org/onlinedocs/gfortran/Code-Gen-Options.html
Таким образом, все переменные с плавающей запятой по умолчанию инициализируются сигнальным NaN и вызывают ошибку времени выполнения, если используются перед установкой.
Такого рода опции компилятора FORTRAN уже присутствовали в 80-х годах, если я правильно помню (по крайней мере, на рабочих станциях SUN), так что это не что-то новое.
Я не вижу эквивалента опции gfortran в gcc. Почему?
Разве это не тот же сервер генерации кода?
gcc -Wuninitialized
не улавливает все и -Wmaybe-uninitialized
улавливает слишком много (ложные тревоги …)… Я бы хотел, чтобы проверка во время ВЫПОЛНЕНИЯ каким-то образом дополняла, особенно когда в устаревшем коде слишком много предупреждений.
Комментарии:
1. Вы пробовали флаг
-O
сWuninitialized
помощью? Или-Wall
(gcc 2.96 )? Кроме того, вы пытались использоватьvalgrid
(valgrind.org )? Он может автоматически обнаруживать множество ошибок в управлении памятью и потоковой передаче, а также подробно профилировать ваши программы.2. Разве вы не можете обновить свой код до инициализации с помощью nan? Тогда вы получаете желаемое поведение независимо от флагов компилятора.
3. C, вообще говоря, не является языком ручного управления.
4. мое предположение: проблемы с переносимостью
5. Да, я помню, что у меня была такая же мысль, когда я перешел с FORTRAN в университете. Это было бы полезно включить в отладочных сборках.