Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > typedef в MSVC и GCC


Автор: SABROG 17.9.2011, 10:32
Подключил хедер из Windows SDK в проект собираемый MinGW и сразу словил ошибку "typedef is initialized (use decltype instead)".
Стал разбираться и наткнулся на эту запись:

Код

typedef __success(return == TRUE) BOOL _BOOL;


Кто может объяснить логику? Сначала думал, что это определение типа определения функции типа __success, но потом понял, что ничего общего с таким нет:

Код

typedef void __success(bool);
__success myfunc;



Автор: mes 17.9.2011, 12:26
http://msdn.microsoft.com/en-us/library/ms235402(v=vs.80).aspx

Автор: borisbn 17.9.2011, 12:42
Правильно ли я понял, что все ф-ции, возвращающие _BOOL (с подчёркиванием в начале), гарантируют, что они будут возвращать TRUE ?

Автор: bsa 17.9.2011, 12:57
Цитата(borisbn @  17.9.2011,  12:42 Найти цитируемый пост)
Правильно ли я понял, что все ф-ции, возвращающие _BOOL (с подчёркиванием в начале), гарантируют, что они будут возвращать TRUE ?
Нет. Просто если условие в скобках выполняется, то функция выполняет все взятые на себя обязанности. Если этого условия нет (__success(...)), то функция обязана выполнять их в любом случае.

Автор: SABROG 17.9.2011, 13:39
Значит это компиляторо-зависимые функции, которые никак не соответствуют стандартам. Спасибо.

Автор: bsa 18.9.2011, 01:03
Этот код спасет отца русской демократии  smile 
Код
#define __suсcess(x)

Автор: volatile 18.9.2011, 01:46
Цитата(SABROG @  17.9.2011,  10:32 Найти цитируемый пост)
typedef __success(return == TRUE) BOOL _BOOL;


Это просто тайпдефится _BOOL  smile 

разберем по частям
смотрим файл "sal.h":
Код

#define __success(expr)                     __inner_success(expr)

теперь смотрим что такое __inner_success(expr)
Код

#define __inner_success(expr)

то есть выражение __success(return == TRUE) разворачивается в ничего, остается:
Код

typedef BOOL _BOOL;


короче __success(exp) - это фиговина для специальных анализаторов кода и других инструментов от M$, и при обычном компилировании просто не участвует. т.е. определена в ничего.


Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)