Скорее всего, вы допустили ошибку в коде, что привело к неопределенному поведению.И «неопределенный» подразумевает, что «он может работать при некоторых обстоятельствах».
Почему вставка printf
заставляет его работать?Некоторые возможности:
Он изменяет временные отношения между различными частями вашей программы или между вашей программой и остальным миром.
Вызов printf запрещает оптимизацию компилятора, которая в противном случае могла бы иметь место.
Вызов printf изменяет внутреннее состояние стандартной библиотеки таким образом, чтобы предотвратить возникновение ошибки.
Вызов printf взаимодействует с оборудованием таким образом, чтобы предотвратить возникновение ошибки..
(Обратите внимание, что многие из тех же соображений верны и при работе под отладчиком - таким образом, термин «heisenbug»: ошибка, которая возникает, только если вы не наблюдаете за ней.)