May be used uninitialized in this function

Нажатие ниже предупреждения с новой версией gcc 6.X

Предупреждение: "temp" может использоваться неинициализированным в этой функции [-Wmaybe-uninitialized]

gcc не должен предупреждать о передаче указателя на неинициализированную переменную функции, о которой она ничего не знает (предположение о том, что функция инициализирует ее). Поэтому я уверен, что gcc знает что-то о logcat и там обнаруживается неинициализированное использование. Может быть, это было связано или так.

Здесь, несмотря на то, что это ослепительно очевидно для людей, gcc фактически не знает, что происходит внутри функциональной bar . Так что никаких предупреждений.

Пусть поможет gcc понять, что происходит:

Просто включение оптимизации помогло gcc посмотреть, что происходит (возможно, произошла какая-то вставка).

Из минимальной части кода, которую вы указали, и предупреждающего сообщения, где, похоже, вы вырезали бит, который на самом деле говорит вам, где именно находится ваш код, проблема заключается в том, что проблема заключается в вашей функции logcat .

Я работаю с Chromium Embedded Framework. Я поставил следующее в основной функции.

В процессе сборки я получаю следующие ошибки:

Почему источник не инициализируется и как его инициализировать?

Решение

Как и в ошибке, ваша переменная «a» не инициализируется при ее использовании. Вы объявили переменную, но не инициализировали ее. Затем в следующей строке вы разыменовываете переменную. Обычно это приводит к сбою вашей программы. Ваш компилятор пытается предупредить вас об этом.

Hitting below warning with new gcc version 6.X

Warning: ‘temp’ may be used uninitialized in this function [-Wmaybe-uninitialized]

2 Answers 2

gcc isn’t supposed to warn about passing a pointer to an uninitialized variable to a function it doesn’t know anything about (the assumption is that the function will initialize it). So I’m pretty sure that gcc knows things about logcat and the uninitialized use is detected in there. Maybe it got inlined or such.

Here, despite it being blindingly obvious to humans, gcc doesn’t actually know what happens inside the function bar . So no warning.

Let’s help gcc to understand what’s going on:

Just turning on optimization helped gcc to see what’s going on (probably some inlining happened).

From the minimal piece of code you’ve shown and the warning message, where it looks like you cut out the bit that actually tells you exactly where in your code the problem happens, I conclude that the problem is in your logcat function.

Оцените статью
ПК Знаток
Добавить комментарий

Adblock
detector