Я знаю, что Visual Studio в опциях отладки заполнит память известным значением.
Есть ли в g ++ (любая версия, но gcc 4.1.2 наиболее интересная) какие-либо опции, которые
заполнить неинициализированную локальную структуру POD узнаваемыми значениями?
struct something{ int a; int b; };
void foo() {
something uninitialized;
bar(uninitialized.b);
}
Я ожидаю, что uninitialized.b
будет непредсказуемой случайностью; явно ошибка и легко
найдено, если оптимизация и предупреждения включены. Но скомпилировано только с -g, нет
предупреждение. У коллеги был случай, когда код, подобный этому, работал, потому что он
по совпадению имел действительное значение; когда обновился компилятор, он начал отказывать.
Он думал, что это потому, что новый компилятор вставляет известные значения в структуру
(во многом так, как VS заполняет 0xCC). По моему опыту, все было иначе
случайные значения, которые не были действительными.
Но теперь мне любопытно - есть ли настройка g ++, которая бы заполняла его?
память, которую стандарт сказал бы иначе, должна быть неинициализирована?