У меня довольно философская проблема с проверкой вывода функции shmat
.Делая это:
void * addr = shmat(shmid, NULL, 0);
if( addr == -1)
{
perror("Uncool stuff");
}
дает мне:
warning: comparison between pointer and integer
И это совершенно нормально.К сожалению, руководство говорит:
Upon success, shmat() returns the address where the segment is attached;
otherwise, -1 is returned and errno is set to indicate the error.
Это довольно стандартное поведение, но как мне с этим справиться?if (addr == (void *) -1)
правильно?Я прочитал этот вопрос и теперь я не совсем уверен, если бы он был на 100% правильным на каждой возможной платформе-бла-бла-бла ;-) Я не нашел других надежных источниковпо этому вопросу.
Я считаю, что спрашивать о подписанности указателей - ошибка, потому что указатели не являются числами.Но в таком случае я больше не уверен ...
Редактировать : эта проблема приводит нас к другому вопросу: char *addr = (char*)shmat(...)
правильно?Согласно полученным ответам, это так, но если мы не примем во внимание ни слова, и т. Д., И т. Д. Да, возможно, я теряю связь с реальностью здесь, но мне любопытно, есть ли THE собственноспособ.