Типизация улыбнула
От: рыбак  
Дата: 07.06.09 05:26
Оценка: 2 (2) :))) :))
В самый ответственный момент написания кода меня отвлекли и получилось такое:

HANDLE h = CreateMutex;

Естественно, оно комплириуется без ворнингов и ошибок.

08.06.09 12:06: Перенесено модератором из 'Коллеги, улыбнитесь' — тут не смеяться надо, а за голову хвататься! — Кодт
Re: Типизация улыбнула
От: x64 Россия  
Дата: 07.06.09 06:47
Оценка:
Зависит от того, что ты хотел получить в итоге. Например, если HANDLE заменить на PBYTE, то получится очень даже системная вещица.
Re[2]: Типизация улыбнула
От: рыбак  
Дата: 07.06.09 07:20
Оценка:
Здравствуйте, x64, Вы писали:

x64>Зависит от того, что ты хотел получить в итоге. Например, если HANDLE заменить на PBYTE, то получится очень даже системная вещица.


Я не извращенец и хотел получить хендл.
Re[3]: Типизация улыбнула
От: Sni4ok  
Дата: 07.06.09 09:12
Оценка: +2 -10
Здравствуйте, рыбак, Вы писали:

Р>Я не извращенец


я с вами не согласен, ибо использование голых хэндлов без обёрток — говорит об обратном.
Re[4]: Типизация улыбнула
От: AlexCrush Россия  
Дата: 07.06.09 10:32
Оценка: +1
Здравствуйте, Sni4ok, Вы писали:

S>Здравствуйте, рыбак, Вы писали:


Р>>Я не извращенец


S>я с вами не согласен, ибо использование голых хэндлов без обёрток — говорит об обратном.


Может человек обёртку и писал ?
Re[5]: Типизация улыбнула
От: Sni4ok  
Дата: 07.06.09 11:00
Оценка:
Здравствуйте, AlexCrush, Вы писали:

AC>Может человек обёртку и писал ?


не катит, так как тогда бы HANDLE h у него мембером класса бы был.
Re[4]: Типизация улыбнула
От: yumi  
Дата: 08.06.09 01:33
Оценка: +9 -1 :)))
Здравствуйте, Sni4ok, Вы писали:

Р>>Я не извращенец

S>я с вами не согласен, ибо использование голых хэндлов без обёрток — говорит об обратном.

А я с Вами не согласен, ибо бездумное использование оберток, к месту или не к месту — говорит об обратном
Lisp is not dead. It’s just the URL that has changed:
http://clojure.org
Re[6]: Типизация улыбнула
От: alzt  
Дата: 08.06.09 09:00
Оценка:
Здравствуйте, Sni4ok, Вы писали:

AC>>Может человек обёртку и писал ?


S>не катит, так как тогда бы HANDLE h у него мембером класса бы был.


Может и был. Обычно люди упрощают код перед выкладыванием, чтобы лишнее не отвлекало.
Re: Типизация улыбнула
От: alexeiz  
Дата: 08.06.09 09:26
Оценка: 12 (4) +1
Здравствуйте, рыбак, Вы писали:

Р>В самый ответственный момент написания кода меня отвлекли и получилось такое:


Р>
Р>HANDLE h = CreateMutex;
Р>

Р>Естественно, оно комплириуется без ворнингов и ошибок.

Такое, вообще-то, не должно компилироваться, потому что указатели на функции не должны приводиться к void*. Comeau выдает ошибку:
typedef void * HANDLE;

HANDLE CreateMutex() { return 0; }

int main()
{
    HANDLE h = CreateMutex;
}

"ComeauTest.c", line 7: error: a value of type "HANDLE (*)()" cannot be used to
initialize an entity of type "HANDLE"
HANDLE h = CreateMutex;


Но VC++ такое компилит. А вот если указать опцию /Za (disable extensions), то уже не компилит с ошибкой:

error C2440: 'initializing' : cannot convert from 'HANDLE (*)(void)' to 'HANDLE'
There is no context in which this conversion is possible

Re: Типизация улыбнула
От: Bell Россия  
Дата: 08.06.09 11:32
Оценка:
Здравствуйте, рыбак, Вы писали:

Из личного набора граблей:
COleDateTime dt;
if(COleDateTime::valid == dt)
...

Любите книгу — источник знаний (с) М.Горький
Re: Типизация улыбнула
От: Vamp Россия  
Дата: 08.06.09 11:56
Оценка:
Это не типизация, а неправильная работа компилятора и неразумная архитектура WinApi.
Да здравствует мыло душистое и веревка пушистая.
Re[4]: Типизация улыбнула
От: Pzz Россия https://github.com/alexpevzner
Дата: 08.06.09 12:41
Оценка: +2 :)
Здравствуйте, Sni4ok, Вы писали:

Р>>Я не извращенец


S>я с вами не согласен, ибо использование голых хэндлов без обёрток — говорит об обратном.


Звучит как религиозная догма
Re: Типизация улыбнула
От: Ведмедь Россия  
Дата: 08.06.09 14:30
Оценка:
Здравствуйте, рыбак, Вы писали:

Р>В самый ответственный момент написания кода меня отвлекли и получилось такое:


Р>
Р>HANDLE h = CreateMutex;
Р>

Р>Естественно, оно комплириуется без ворнингов и ошибок.

Странно, VS вроде ругался...

Но я с подобным встречался, когда писал под одно хиитрое устройство...
Я потом целый день ломал голову, почему не выполняется код в функции при вызове CreateMutex( в реале другая функция была, но не суть )
Да пребудет с тобой Великий Джа
Re[2]: Типизация улыбнула
От: Кодт Россия  
Дата: 08.06.09 17:48
Оценка:
Здравствуйте, alexeiz, Вы писали:

A>Но VC++ такое компилит. А вот если указать опцию /Za (disable extensions), то уже не компилит с ошибкой:


Там всё гораздо жёстче.
#include <windows.h>
int main()
{
    HANDLE h = CreateMutex;
}

не компилит с тучей ошибок (путь до PlatformSDK обрезал, чтоб не захламлять)

winnt.h(477) : error C2467: illegal declaration of anonymous 'struct'
winnt.h(495) : error C2467: illegal declaration of anonymous 'struct'
winnt.h(7723) : error C2467: illegal declaration of anonymous 'struct'
winnt.h(7732) : error C2467: illegal declaration of anonymous 'struct'
winnt.h(8248) : error C2467: illegal declaration of anonymous 'struct'
winnt.h(9066) : error C2133: '_EVENTSFORLOGFILE::pEventLogRecords' : unknown size
winnt.h(9072) : error C2133: '_PACKEDEVENTINFO::ulOffsets' : unknown size
winbase.h(232) : error C2467: illegal declaration of anonymous 'struct'
winbase.h(558) : error C2467: illegal declaration of anonymous 'struct'
wingdi.h(1893) : error C2467: illegal declaration of anonymous 'struct'
wingdi.h(1899) : error C2467: illegal declaration of anonymous 'struct'
wingdi.h(1947) : error C2467: illegal declaration of anonymous 'struct'
wingdi.h(1953) : error C2467: illegal declaration of anonymous 'struct'
winreg.h(113) : error C2146: syntax error : missing ';' before identifier 'QUERYHANDLER'
winreg.h(114) : error C4430: missing type specifier — int assumed. Note: C++ does not support default-int
winreg.h(116) : error C2143: syntax error : missing ';' before '*'
winreg.h(116) : error C4430: missing type specifier — int assumed. Note: C++ does not support default-int
winreg.h(116) : error C2365: 'QUERYHANDLER' : redefinition; previous definition was 'function'
winreg.h(113) : see declaration of 'QUERYHANDLER'
winreg.h(116) : error C4430: missing type specifier — int assumed. Note: C++ does not support default-int
winreg.h(119) : error C2146: syntax error : missing ';' before identifier 'pi_R0_1val'
winreg.h(119) : error C4430: missing type specifier — int assumed. Note: C++ does not support default-int
winreg.h(119) : error C4430: missing type specifier — int assumed. Note: C++ does not support default-int
winreg.h(120) : error C2146: syntax error : missing ';' before identifier 'pi_R0_allvals'
winreg.h(120) : error C4430: missing type specifier — int assumed. Note: C++ does not support default-int
winreg.h(120) : error C4430: missing type specifier — int assumed. Note: C++ does not support default-int
winreg.h(121) : error C2146: syntax error : missing ';' before identifier 'pi_R3_1val'
winreg.h(121) : error C4430: missing type specifier — int assumed. Note: C++ does not support default-int
winreg.h(121) : error C4430: missing type specifier — int assumed. Note: C++ does not support default-int
winreg.h(122) : error C2146: syntax error : missing ';' before identifier 'pi_R3_allvals'
winreg.h(122) : error C4430: missing type specifier — int assumed. Note: C++ does not support default-int
winreg.h(122) : error C4430: missing type specifier — int assumed. Note: C++ does not support default-int
mmsystem.h(1837) : error C2467: illegal declaration of anonymous 'struct'
mmsystem.h(1841) : error C2467: illegal declaration of anonymous 'struct'
mmsystem.h(1862) : error C2467: illegal declaration of anonymous 'struct'
mmsystem.h(1866) : error C2467: illegal declaration of anonymous 'struct'
rpcndr.h(1021) : error C2133: '_MIDL_FORMAT_STRING::Format' : unknown size
wtypes.h(1001) : error C2467: illegal declaration of anonymous 'struct'
wtypes.h(1028) : error C2467: illegal declaration of anonymous 'struct'
wtypes.h(1041) : error C2467: illegal declaration of anonymous 'struct'
oaidl.h(484) : error C2467: illegal declaration of anonymous 'struct'
oaidl.h(486) : error C2467: illegal declaration of anonymous 'struct'
msxml.h(595) : warning C4224: nonstandard extension used : formal parameter 'DOMDocument' was previously defined as a type
msxml.h(1213) : warning C4224: nonstandard extension used : formal parameter 'DOMDocument' was previously defined as a type
propidl.h(371) : error C2467: illegal declaration of anonymous 'struct'
t.cpp(7) : error C2440: 'initializing' : cannot convert from 'HANDLE (*)(LPSECURITY_ATTRIBUTES,BOOL,LPCSTR)' to 'HANDLE'
There is no context in which this conversion is possible

Так что плачьте и рыдайте, кушать кактус подано.
... << RSDN@Home 1.2.0 alpha 4 rev. 1207>>
Перекуём баги на фичи!
Re[3]: Типизация улыбнула
От: alexeiz  
Дата: 08.06.09 20:29
Оценка:
Здравствуйте, Кодт, Вы писали:

К>Здравствуйте, alexeiz, Вы писали:


A>>Но VC++ такое компилит. А вот если указать опцию /Za (disable extensions), то уже не компилит с ошибкой:


К>Там всё гораздо жёстче.

К>
К>#include <windows.h>
...


Ну так это понятно. Windows SDK никогда не компилировался в /Za режиме. В моём примере я специально ввёл локальное определение HANDLE без <windows.h>.

Кстати, так как /Za практически никто не использует, там могут быть баги, которых иначе в VC++ нет.
Re[5]: Типизация улыбнула
От: TarasCo  
Дата: 08.06.09 20:35
Оценка:
Pzz>Звучит как религиозная догма

Религия любителей ирисок
Да пребудет с тобою сила
Re[2]: Типизация улыбнула
От: alexeiz  
Дата: 09.06.09 08:04
Оценка:
Здравствуйте, Bell, Вы писали:

B>Здравствуйте, рыбак, Вы писали:


B>Из личного набора граблей:

B>
B>COleDateTime dt;
B>if(COleDateTime::valid == dt)
B>...
B>

B>

Да, забавно. COleDateTime::valid — это значение 0 из enum'а, COleDateTime имеет operator DATE(), а DATE — это просто double. Происходит сравнение двух double.
Re: Типизация улыбнула
От: Alexander G Украина  
Дата: 09.06.09 12:08
Оценка:
Здравствуйте, рыбак, Вы писали:

Р>В самый ответственный момент написания кода меня отвлекли и получилось такое:


Р>
Р>HANDLE h = CreateMutex;
Р>

Р>Естественно, оно комплириуется без ворнингов и ошибок.

Казнить нельзя помиловать:
boost::shared_ptr<BYTE> pBuffer(
  retinterpret_cast<BYTE*>(_aligned_malloc(size, alignment), _aligned_free));
Русский военный корабль идёт ко дну!
Re: Типизация улыбнула
От: Аноним  
Дата: 09.06.09 12:10
Оценка:
Р>
Р>HANDLE h = CreateMutex;
Р>

Р>Естественно, оно комплириуется без ворнингов и ошибок.

а что за привычка ставить ; до написания параметров?
Re[2]: Типизация улыбнула
От: Alexander G Украина  
Дата: 09.06.09 12:14
Оценка:
Здравствуйте, Аноним, Вы писали:

А>а что за привычка ставить ; до написания параметров?


В языке Паскаль скобки при вызове функций без параметров не ставятся. В Delphi можно ставить, но для "магии компилятора", вроде ReadLn — нельзя.
Русский военный корабль идёт ко дну!
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.