Конференция "Прочее" » "-1" vs "NOT(0)"
 
  • Пробегал2... (13.05.08 20:32) [0]
    Зачем в исходниках WinSock объявление сделали так:

    INVALID_SOCKET    = TSocket(NOT(0));



    Если можно было бы просто:

    INVALID_SOCKET    = -1 ;



    Как например следом объявленный:

    SOCKET_ERROR      = -1;

  • Ketmar © (13.05.08 21:02) [1]
    потому что TSocket не обязан быть со знаком?
  • Renegat (13.05.08 21:09) [2]
    > потому что TSocket не обязан быть со знаком?


     {$EXTERNALSYM u_int}
     u_int = Integer;
     {$EXTERNALSYM u_long}
     u_long = Longint;

    { The new type to be used in all
     instances which refer to sockets. }

     {$EXTERNALSYM TSocket}
     TSocket = u_int;


    winSock.pas
  • Ketmar © (13.05.08 21:11) [3]
    > Renegat   (13.05.08 21:09) [2]
    то, что в ранних Delphi не было u_int — не причина корёжить объявление. помедитируй на тему «что есть u_int в C» и «откуда взялся winsock.pas».

    алсо, гугл по «автоматическая трансляция заголовков».
  • Renegat (13.05.08 21:15) [4]
    Впрочем, а какая разница?
  • Renegat (13.05.08 21:16) [5]
    TSocket(NOT(0)) = 0FFFFFFFFh = -1...
  • Игорь Шевченко © (13.05.08 21:16) [6]
    winsock.h

    /*
    * This is used instead of -1, since the
    * SOCKET type is unsigned.
    */
    #define INVALID_SOCKET  (SOCKET)(~0)
    #define SOCKET_ERROR            (-1)
  • Ketmar © (13.05.08 21:17) [7]
    да никакой. к тому же делание дескриптора сокета беззнаковым — это опять m$-way. в нормальных системах оно знаковое, потому что при ошибке открытия принято возвращать -1. но то в нормальных системах, а то m$, которая даже bsd-код толком украсть не может.
  • Palladin © (13.05.08 21:23) [8]

    > Ketmar ©   (13.05.08 21:17) [7]

    ну, скажем, не вся ms, а отдельные ее представители иногда радуют своим видением )
  • Ketmar © (13.05.08 21:28) [9]
    ничего, в связи с перспективами, открывающимися от sua (или как там *nix-запускалка в виста ынтерпрайз зовётся?) со страхом жду m$ posix.
  • Пробегал2... (13.05.08 21:32) [10]
    Игорь Шевченко ©   (13.05.08 21:16) [6]
    #define INVALID_SOCKET  (SOCKET)(~0)


    ммм... Тогда у меня вопрос - а почему в winsock.h объвлено именно так, а не просто:

    #define INVALID_SOCKET -1

    Или в Define нельзя использовать отрицательные числа? А приведение:

    (socket)(-1)

    вызвало бы ошибку... Так?
  • Игорь Шевченко © (13.05.08 21:35) [11]

    > Тогда у меня вопрос - а почему в winsock.h объвлено именно
    > так, а не просто:


    наверное надо в оригинальный код BSD смотреть
  • Ketmar © (13.05.08 21:36) [12]
    > Пробегал2…   (13.05.08 21:32) [10]
    медитируем: «This is used instead of -1, since the SOCKET type is unsigned.»
    что неясно? (-1) не определено для unsigned типов.
  • Ketmar © (13.05.08 21:39) [13]
    > наверное надо в оригинальный код BSD смотреть
    есть мнение, что там нет отдельного типа, оно там вовсе даже int. потому что все fd типа int.
  • Пробегал2... (13.05.08 22:04) [14]
    Ketmar ©   (13.05.08 21:36) [12]
    что неясно? (-1) не определено для unsigned типов


    ну и что. Ведь там стоит приведение типов:

    (SOCKET)(~0)



    ты хочешь сказать, что такое объявление:

    (SOCKET)(-1)



    не сработало бы?
  • Ketmar © (13.05.08 22:24) [15]
    > ты хочешь сказать, что такое объявление:(SOCKET)(-1)не сработало
    > бы?

    какая размернсть у -1? приведение -1 к беззнаковому типу не расширяет знаковый бит. и если -1 было внутри компилятора размером shortint, например, то получится полная фигня. ку?
  • Ketmar © (13.05.08 22:25) [16]
    вдогон: таки гуглим про автоматическую трансляци. заголовков. сишный #define — вовсе не то же самое, что дельфийский const.
  • Пробегал2... (14.05.08 01:37) [17]
    Ketmar ©   (13.05.08 22:24) [15]
    приведение -1 к беззнаковому типу не расширяет знаковый бит. и если -1 было внутри компилятора размером shortint, например, то получится полная фигня. ку?


    а если ноль был внутри компилятора размером shortint, то NOT(0) также не расширяет знаковый бит. Ку?
  • ketmar © (14.05.08 01:41) [18]
    > Пробегал2…   (14.05.08 01:37) [17]
    ты моё «вдогон» прочёл? ты настолько наивен и считаешь, что в борланде всю ёту фиготень руками настукивали? #define там было, #define. а в Delphi аналога #define нет.
 
Конференция "Прочее" » "-1" vs "NOT(0)"
Есть новые Нет новых   [134435   +13][b:0][p:0.001]