-
Зачем в исходниках WinSock объявление сделали так:
INVALID_SOCKET = TSocket(NOT(0));
Если можно было бы просто:
INVALID_SOCKET = -1 ;
Как например следом объявленный:
SOCKET_ERROR = -1;
-
потому что TSocket не обязан быть со знаком?
-
> потому что TSocket не обязан быть со знаком?
u_int = Integer;
u_long = Longint;
TSocket = u_int;
winSock.pas
-
> Renegat (13.05.08 21:09) [2]
то, что в ранних Delphi не было u_int — не причина корёжить объявление. помедитируй на тему «что есть u_int в C» и «откуда взялся winsock.pas».
алсо, гугл по «автоматическая трансляция заголовков».
-
Впрочем, а какая разница?
-
TSocket(NOT(0)) = 0FFFFFFFFh = -1...
-
winsock.h
/*
* This is used instead of -1, since the
* SOCKET type is unsigned.
*/
#define INVALID_SOCKET (SOCKET)(~0)
#define SOCKET_ERROR (-1)
-
да никакой. к тому же делание дескриптора сокета беззнаковым — это опять m$-way. в нормальных системах оно знаковое, потому что при ошибке открытия принято возвращать -1. но то в нормальных системах, а то m$, которая даже bsd-код толком украсть не может.
-
> Ketmar © (13.05.08 21:17) [7]
ну, скажем, не вся ms, а отдельные ее представители иногда радуют своим видением )
-
ничего, в связи с перспективами, открывающимися от sua (или как там *nix-запускалка в виста ынтерпрайз зовётся?) со страхом жду m$ posix.
-
Игорь Шевченко © (13.05.08 21:16) [6]
#define INVALID_SOCKET (SOCKET)(~0)
ммм... Тогда у меня вопрос - а почему в winsock.h объвлено именно так, а не просто:
#define INVALID_SOCKET -1
Или в Define нельзя использовать отрицательные числа? А приведение:
(socket)(-1)
вызвало бы ошибку... Так?
-
> Тогда у меня вопрос - а почему в winsock.h объвлено именно
> так, а не просто:
наверное надо в оригинальный код BSD смотреть
-
> Пробегал2… (13.05.08 21:32) [10]
медитируем: «This is used instead of -1, since the SOCKET type is unsigned.»
что неясно? (-1) не определено для unsigned типов.
-
> наверное надо в оригинальный код BSD смотреть
есть мнение, что там нет отдельного типа, оно там вовсе даже int. потому что все fd типа int.
-
Ketmar © (13.05.08 21:36) [12]
что неясно? (-1) не определено для unsigned типовну и что. Ведь там стоит приведение типов:
(SOCKET)(~0)
ты хочешь сказать, что такое объявление:
(SOCKET)(-1)
не сработало бы?
-
> ты хочешь сказать, что такое объявление:(SOCKET)(-1)не сработало
> бы?
какая размернсть у -1? приведение -1 к беззнаковому типу не расширяет знаковый бит. и если -1 было внутри компилятора размером shortint, например, то получится полная фигня. ку?
-
вдогон: таки гуглим про автоматическую трансляци. заголовков. сишный #define — вовсе не то же самое, что дельфийский const.
-
Ketmar © (13.05.08 22:24) [15]
приведение -1 к беззнаковому типу не расширяет знаковый бит. и если -1 было внутри компилятора размером shortint, например, то получится полная фигня. ку?
а если ноль был внутри компилятора размером shortint, то NOT(0) также не расширяет знаковый бит. Ку?
-
> Пробегал2… (14.05.08 01:37) [17]
ты моё «вдогон» прочёл? ты настолько наивен и считаешь, что в борланде всю ёту фиготень руками настукивали? #define там было, #define. а в Delphi аналога #define нет.