До, и я полагаю, включая C89, значение было не определено. Стандарту просто нечего было сказать о ненулевом (или, что еще хуже, отрицательном) размере. Я вполне уверен, что теперь это Реализация Определена. Используйте ненулевой размер для переносимости.
Вы можете уклониться от вопроса, используя адрес некоторой глобальной или статической переменной в качестве дозорного, возможно, с подходящим приведением.
Другой традиционный подход (используемый в самых ранних версиях signal()
, IIRC) заключался в приведении небольших целых чисел, отличных от 0, к типу указателя. На самом деле это относительно непереносимо, поскольку единственное целое число, которое переносимо и безопасно приводит к указателю, равно 0, что равно NULL.
Обратите внимание, что независимо от того, выделены вы или нет, вам нужно быть осторожным, чтобы никогда не пытаться фактически освободить ваш сторожевой указатель.