Я читаю это сообщение в блоге и в разделе Нулевые указательные константы и выраженные в скобках выражения ссылки на автора § 6.3.2.3 и § 6.5.1 из стандарта ISO C и говорит:
Он не говорит, что константа нулевого указателя в скобках указана в константе нулевого указателя.
Это означает, что, строго говоря,
(void*)0
является нулевым указателем константа, но((void*)0)
не является.
Тогда:
Я уверен, что большинство реализаций C обрабатывают константу нулевого указателя в скобках как константу нулевого указателя и определяют
NULL
либо как0
,((void*)0)
, либо каким-либо другим способом.
В двух упомянутых разделах говорится:
§ 6.3.2.3
Целочисленное постоянное выражение со значением 0 или такое выражение cast to type void *, называется константой нулевого указателя.
§ 6.5.1
Выражение в скобках является основным выражением. Тип и значение идентичны выражениям безпредметного выражения. Это lvalue, обозначение функции или выражение void, если unparenthesized выражение, соответственно, lvalue, функция указатель или выражение void.
Не противоречит ли смещенное предложение автору утверждения, что ((void*)0)
не является константой нулевого указателя?