- 1
- 2
- 3
- 4
- 5
#define InlineIsEqualGUID(rguid1, rguid2) \
(((unsigned long *) rguid1)[0] == ((unsigned long *) rguid2)[0] && \
((unsigned long *) rguid1)[1] == ((unsigned long *) rguid2)[1] && \
((unsigned long *) rguid1)[2] == ((unsigned long *) rguid2)[2] && \
((unsigned long *) rguid1)[3] == ((unsigned long *) rguid2)[3])
myaut 08.07.2013 00:04 # +2
superhackkiller1997 08.07.2013 01:44 # −9
Dummy00001 08.07.2013 00:45 # −1
superhackkiller1997 08.07.2013 01:47 # −11
superhackkiller1997 08.07.2013 02:01 # −11
Либо я не прав? И это говно хотябы один стандарт поддерживает?
bormand 08.07.2013 05:45 # 0
C89 вроде как в нем все-таки есть.
superhackkiller1997 08.07.2013 05:58 # −6
bormand 08.07.2013 05:54 # +4
В чем вопросики заключаются, если не секрет?
Из минусов кода:
- Железобетонная привязка к 32 битному unsigned long. Из-за таких, простите, питушков, мс и оставило long 32 битным даже на x86-64.
- Макрос назван как функция (не капсом), но в то же время вычисляет свои аргументы от 1 до 4 раз. Может привести к веселым последствиям, если кто-то "оптимизирует" код, и подставит вызов функции в один из параметров макро.
govnomonad 08.07.2013 09:02 # +3
Раскрой маркос. Там rguid не обернуты скобками
bormand 08.07.2013 09:36 # +2
А ну да, туплю, вы правы. Оно еще и забагует на guid_array + i, смещаясь по 4 байта вместо 16...
В любом случае аффтар сего макроса не знал основ макроёбства :)
serg_ik 08.07.2013 10:03 # +3
Собственно после встречи с этой "фичей" IRL захотелось поделиться этой макрой.
bormand 08.07.2013 10:13 # +1
myaut 08.07.2013 11:40 # 0
bormand 08.07.2013 12:51 # 0
bormand 08.07.2013 10:16 # +2