- 1
w = (GtkWidget*)(*((int*)(lw->data)));
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+137.6
w = (GtkWidget*)(*((int*)(lw->data)));
Объект для медитаций
:D
Не для того чтобы задеть, а ради того чтобы научиться, вопрос:
как в данном случае правильно преобразовать данные, хранящиеся в ячейке на которую указывает элемент структуры data, к указателю на GtkWidget?
Если жизненно необходимо преобразование типов, то использовать явные преобразования в стиле C++ (если говорим о нем). В любом случае тут должно быть приведение к указателю на указатель судя по контексту. А уж static_cast или reinterpret_cast это будет - зависит от типа поля data. Что-то в духе
w = *static_cast<GtkWidget**>(lw->data);
w = *(GtkWidget**)(lw->data);
Преобразование к инту не нужно. Кастовать указатели в интегральные типы и обратно очень плохая практика.
Возможно "data" имеет тип "char", и чтобы в "w" положить нужное значение поинтера (для 32-битных систем, 32-битное значение, что соотвествует int-у или, допустим, long-у), сначала приказываем считывать значение как int, а только потом ложим в w. Тут есть смысл, разве что не кроссплатформено это всё (хотя бы "long" использовали, хотя это было бы тоже убого).
Правильным вариантом было бы например:
w = GTK_WIDGET(*lw->data);