сделать определение «типа» указателем.
#define ADR ((unsigned int*) 0x2000)
unsigned int * po;
if(po<ADR) { };
Также я настоятельно рекомендую использовать типы stdint.h
для таких определений. на всякий случай, если компилятор и аппаратное обеспечение имеют для вас разное понимание того, насколько велика int.
Также используйте правильные атрибуты. Определение адресов исправлений часто подразумевает отображение какой-либо памяти io. , тогда вы должны использовать volatile
, чтобы сообщить компилятору, что содержимое этого адреса может неожиданно измениться.
Если в его единственном адресе используется определитель const
.
#include <stdint.h>
#define ADR ((volatile uint16_t*) 0x2000)
uint16_t * po;
if(po<ADR) { };
Нет, разве, вопросом является типом ADR, который представляет собой целое число – mjs
Технически такое сравнение не имеет смысла. Чтобы быть переносимыми, сравнения указателей имеют смысл только между двумя указателями в один и тот же массив или выделенный блок. Но если вы, скажем, на какой-то встроенной системе, где вы действительно хотите сравнить указатель на абсолютный адрес, тогда вы должны действительно знать достаточно, чтобы понять, игнорировать или не игнорировать это предупреждение. –