Одобрено: Fortect
За последние несколько недель один читатель столкнулся с кодом ошибки с фактическим указателем void, который используется для арифметических дилемм. Эта проблема возникает из-за нескольких факторов. Теперь займемся ими.
Запрошено
Посетили 28000 раз
У меня есть опыт написания и чтения регистров для crammap вроде этого:
// ЧИТАТЬвозврат 3. ((volatile uint32_t *) (дорожная карта + смещение));// ЗАПИСЫВАТЬ* ((volatile uint32_t *) (местоположение + смещение)) = значение;
Предупреждение: подсказка типа "void *" используется в математике [-Wpointer-arith]
Как изменить точный код, подавляющий предупреждения? Я использую C ++ и Linux.
задан 5 ноября 2014 г. в 11:04
1321
Не тот ответ, который вам нужен? Прокрутите другие вопросы, помеченные указателями C ++, нулевым указателем, арифметикой указателя или задайте свой вопрос.
Одобрено: Fortect
Fortect — самый популярный и эффективный в мире инструмент для ремонта ПК. Миллионы людей доверяют ему обеспечение быстрой, бесперебойной и безошибочной работы своих систем. Благодаря простому пользовательскому интерфейсу и мощному механизму сканирования Fortect быстро находит и устраняет широкий спектр проблем Windows — от нестабильности системы и проблем с безопасностью до проблем с управлением памятью и производительностью.
а>
Поскольку void -
является допустимым указателем на произвольный тип, вы не можете выполнять арифметические операции с указателями, потому что компилятор явно не знает размер, связанный с объектом, который ориентиры на.
Лучший способ сделать это – помочь вам преобразовать map
в какой-то тип, который тогда был шириной в один байт, а также выполнить некоторые арифметические операции. Для многих из них любой может использовать uint8_t
:
// ЧИТАТЬreturn * ((volatile uint32_t *) (((uint8_t *) map) + cancel));// ЗАПИСЫВАТЬ* ((volatile uint32_t *) (((uint8_t *) map) + уменьшение)) = значение;
654
Ответ дал 5 ноя 2014 11:34
56,6 тыс.
Тип void должен быть неполным типом. Его размер неизвестен. Итак, покажите, что математика с подсказками, которые помогут создать вакуум, на самом деле не имеет смысла. Вам нужно привести указатель, который возвращается в key void, на указатель другого типа. Примером указателя может быть текстовый символ.Также обратите внимание, что клиентам не разрешено фактически назначать объект, объявленный с использованием квалификатора erratic.
указан 14 ноя, 14 в 11:14
231 000
Если конкретный способ использования арифметики для нулевых рекомендаций почти наверняка действительно то, что вам нужно, поскольку GCC считает возможным вычисления (см. Арифметика для нулевых методов и указателей на функции), вы можете использовать -Wno-pointer-arith <. используйте / code>, чтобы подавить предупреждение.
позаботился о 21 янв.
164
Повысьте производительность вашего компьютера с помощью этой простой загрузки. г.