Цитата(k155la3 @ Jun 13 2017, 16:53)
Я не использую GCC. Если хотите оказать содействие ТС - объясните, что означает
Гугл-то вы используете?
По словам "gcc typeof" можно найти исчерпывающее описание.
Примеры по первой же ссылке:
Код
#define pointer(T) typeof(T *)
#define array(T, N) typeof(T [N])
((typeof(x))-1)означает "привести минус единицу к типу исходного аргумента". Там они дальше проверяют, положительное это число (что, очевидно, будет если икс - беззнаковый тип), или отрицательное (для знакового икса).
Более того, можно вбить в гугл слово "DIV_ROUND_CLOSEST". Также по ПЕРВОЙ же ссылке есть исходный заголовок, в котором есть подробный комментарий.
Код
/*
* Divide positive or negative dividend by positive or negative divisor
* and round to closest integer. Result is undefined for negative
* divisors if he dividend variable type is unsigned and for negative
* dividends if the divisor variable type is unsigned.
*/
#define DIV_ROUND_CLOSEST(x, divisor)( \
{ \
typeof(x) __x = x; \
typeof(divisor) __d = divisor; \
(((typeof(x))-1) > 0 || \
((typeof(divisor))-1) > 0 || \
(((__x) > 0) == ((__d) > 0))) ? \
(((__x) + ((__d) / 2)) / (__d)) : \
(((__x) - ((__d) / 2)) / (__d)); \
} \
)
Зачем что-то изобретать на ровном месте, если есть документация?!