Сравнение порядка двух указателей не имеет смысла, кроме случаев, когда оба указателя указывают на один и тот же массив (и даже в этом случае это в лучшем случае сомнительно; как правило, вместо упорядочения вы используете неравенство).
Так как ваша настоящая проблема
старшие байты адреса моего сигнала перезаписываются на 0XFFFE0
Первым делом стоит выяснить, почему это происходит и можно ли его предотвратить: если адрес переопределяется, это указывает на то, что в коде что-то очень не так, и вам следует устранить основную причину, а не симптомы.
Тем не менее, если все, что требуется, это обнулить старшие, переопределенные байты вашего указателя, переносимый способ - преобразовать указатель в целое число и манипулировать этим , а не манипулировать указателем напрямую. :
const uintptr_t mask_bytes = 0xFFFE;
const int mask_width = 4 * CHAR_BIT; // ?!
const uintptr_t mask = mask_bytes << ((sizeof(uintptr_t) * CHAR_BIT) - mask_width);
uintptr_t uaddr = (uintptr_t) addr;
if ((uaddr & mask) == mask) {
addr = (void*) (uaddr & ~ mask);
}
… замените void*
вашим фактическим типом указателя.