У меня странное условие, которое появляется только в выходных данных gcc -O0 -g, а не в gcc -O3, не в MSVC, не в выходных данных отладки MSVC.
void func(void) {
static int enabled;
if (!enabled) {
// do stuff
enabled = 1;
}
}
Проблема, которая появляется в gcc-O0 -g только в том случае, если иногда включено возвращается к 0. Но не всегда, только в некоторых редких моментах выполнения программы.Функция проходит через это вообще.Что может заставить его запутаться?Может ли это «включено» быть изменены внешне?Но оно объявлено внутри него.
РЕДАКТИРОВАТЬ: есть способ установить для него значение 0 внутри функции, но ему предшествует большой жирный printf, который вообще не печатается [и нет логического способачтобы это вообще произошло в условиях испытаний.Похоже, что он вообще не идет ни к чему, что явно делает enabled = 0.
EDIT2: он вызывается только основным потоком.
EDIT3: он становится более причудливым.Он не отображается в linux gcc -O0 -g, а только в mingw-w64 [gcc -O0 -g].
РЕДАКТИРОВАТЬ4: Появились часы с включенными часами и часами, чтобы показать, что они изменяются в некоторых случаях if (! Enabled) (которое должно быть только для чтения).
EDIT5: После помощи от #mingw-w64 при значении oftc кажется, что он «исправляет», если «булева последовательность» перевернута, например, enable инициализируется в 1, а затем устанавливается в 0. «Инициализируя статическую переменную ненулевым значением, помещает ее в раздел .data»«Так что есть проблема с lcomm» «Я предполагаю, что у вас есть переполнение буфера в другом месте вашего кода» *