Я ищу простой способ найти неинициализированные членские переменные класса.
Нахождение их или в или во время компиляции во время выполнения в порядке.
В настоящее время я имею точку останова в конструкторе класса и исследую членские переменные один за другим.
Это массив примитивных типов, который сам по себе не является примитивным. Хорошее правило - когда задействовано новое ключевое слово, результат будет в куче.
-121--813909-Вы могли бы сделать что-то подобное:
<body>
<textarea id="txtArea" onkeypress="onTestChange();"></textarea>
<script>
function onTestChange() {
var key = window.event.keyCode;
// If the user has pressed enter
if (key === 13) {
document.getElementById("txtArea").value = document.getElementById("txtArea").value + "\n*";
return false;
}
else {
return true;
}
}
</script>
</body>
Хотя новая строка символов от нажатия enter все равно будет там, но ее начало к получению того, что вы хотите.
-121--1647258- -Wuninitialized
?
(Проверяется, используется ли переменная неинициализированной, т.е. если
struct Q {
int x, y;
Q() : x(2) {}
int get_xy() const { return x*y; }
};
g++ предупреждает только при вызове get _ xy ()
без назначения y
.)
Самый большой «Pro» использования UTC заключается в том, что если вы решите пойти с ним, то вы всегда можете быть уверены, что даты хранятся таким образом и никогда не придется сомневаться в себе. Это спасает много хлопот.
-121--3286755-Вы можете прочитать о ключевом слове без знака в ссылке C++ .
В этом вопросе существуют два различных типа: подписанный и незаписанный. По умолчанию целые числа подписываются, что означает, что они могут иметь отрицательные значения.
В 32-разрядной системе целое число равно 32 Бит, что означает, что оно может содержать значение ~ 4 миллиардов.
И когда он подписан, это означает, что нужно разделить его, оставив от -2 млрд до + 2 млрд.
Когда он не подписан, однако значение не может содержать любые отрицательные числа, так что для целых чисел это будет означать от 0 до + 4 миллиардов.
Есть немного больше информации об этом в Википедии .
-121--815682-Valgrind может сообщить, находитесь ли вы на linux.
Valgrind (FREE, под Linux) и Purify (под Windows) находят неинициализированные переменные, недействительные указатели и т.п., выполняя свой код на специальной виртуальной машине.
Это простой в использовании и чрезвычайно мощный инструмент; он, скорее всего, найдет много ошибок за пределами очевидных неинициализированных переменных.
Coverity, Klocwork и Lint могут найти неинициализированные переменные, используя статический анализ кода.
Если вы используете Visual Studio, вы можете компилировать режим отладки, остановить программу в отладчике и искать, какие переменные истециализируются на байты, содержащие 0xCC (стек) или 0xCD (куча) Отказ
Хотя лично я бы вложил в статический инструмент анализа для более тщательного подхода.
Если вы используете GCC, вы можете использовать флаг -Weffc++
, который генерирует предупреждение, когда переменная не инициализирована в списке инициализации членов. Это:
class Foo
{
int v;
Foo() {}
};
Приводит к:
$ g++ -c -Weffc++ foo.cpp -o foo.o
foo.cpp: In constructor ‘Foo::Foo()’:
foo.cpp:4: warning: ‘Foo::v’ should be initialized in the member initialization list
Одним из недостатков является то, что -Weffc++
также предупредит вас, когда у переменной есть соответствующий конструктор по умолчанию и инициализация, таким образом, не нужна. Он также предупредит вас, если вы инициализируете переменную в конструкторе, но не в списке инициализации членов. Также он предупреждает о многих других проблемах в стиле C++, таких как отсутствие конструкторов копирования, так что вам, возможно, придется немного почистить свой код, если вы хотите использовать -Weffc++
на регулярной основе.
Есть также ошибка, из-за которой программа всегда выдает предупреждение при использовании анонимных объединений, которую в настоящее время нельзя обойти, кроме как отключить предупреждение, что можно сделать с помощью:
#pragma GCC diagnostic ignored "-Weffc++"
В целом, однако, я нашел -Weffc++
невероятно полезным в отлавливании многих распространенных ошибок C++.