Есть ли способ заставить gcc обнаружить все неопределенное поведение? Я хочу, чтобы он обнаруживал обе вещи, которые можно обнаружить во время компиляции и во время выполнения. Я знаю, что UB полезен как для упрощения создания компиляторов, так и для того, чтобы компилятор мог оптимизировать код. Последнее не имеет значения, когда вы отлаживаете, и потребность в легких компиляторах не так велика, как это было в 1972 году. Более того, gcc на данный момент является очень зрелым компилятором, и если бы это было возможно, он бы сильно испортил отладку проще.
Я знаю, что -Wformat
выдаст предупреждение для printf("%d", 42)
и для неинициализированных переменных. Параметр -Warray-bounds
может перехватывать, когда вы пытаетесь получить доступ к памяти вне массива, хотя мне нужно было поработать над созданием кода, который фактически выдает предупреждение. Я также знаю, что некоторые ошибки во время выполнения могут быть обнаружены с помощью -fstack-protector-all
.
Так что мой вопрос просто так. Есть ли способ гарантировать , что все UB будут обнаружены, либо при компиляции, если это возможно, но самое позднее, когда это произойдет во время выполнения?