Pull to refresh

Comments 17

Не специалист в тонкостях C, так что может кто-нибудь объяснить: если приводить 0 не к void *, а например к long *, то это уже не будет считаться NULL-ом?
Все еще будет NULL. 0, (void*) 0 и NULL — это null pointer constant.
An integer constant expression with the value 0, or such an expression cast to type void *, is called a null pointer constant. — C11 6.3.2.3.3

Как раз для этого нужно API для доступа к синтаксическому дереву во время комплляции (т.е. синтаксические макросы). Но в cи (и особенно c++) не ищут легких путей:)

UFO landed and left these words here
В тексте письма написано что-то вроде «должно подходить для передачи в __builtin_choose_expr». Не уверен, как это расшифровывается
UFO landed and left these words here
Классная наркомания!
А есть ли какой-то смысл в том, что одна единица написана в восьмеричной системе (01, а не просто 1)?
это 0l нуль-строчная-л (long 0), а не 01 нуль-один (восьмеричная единица). ломает мозг, да.
UFO landed and left these words here

Если в макросе х — не константа, а чистая функция, то имеет ли право компилятор заменить x * 0 на 0, так как для внешнего наблюдателя ничего не изменится?

В качестве оптимизации да. Но поскольку оптимизации не должны изменять семантику программы, на вывод типов это не влияет. Если бы в C были constexpr-функции из C++, тогда другое дело (наверное).

UFO landed and left these words here
UFO landed and left these words here
Sign up to leave a comment.

Articles