Лучший способ написать это в виде комментария doxygen или записи в любой используемой вами системе документации, информирующей абонентов о том, что они уже должны знать: NULL
не является допустимым указателем. Даже в этом случае вместо специального указания на то, что NULL
недопустимо, имеет смысл просто задокументировать аргумент x
как действительный указатель на тип foo
. Это также охватывает миллиарды других недопустимых значений указателя. Лично я предпочитаю не тратить время на документирование этого требования для каждой функции, а вместо этого документировать как общую часть интерфейсов моей библиотеки, чтобы, если не указано иное для конкретной функции, все аргументы указателя должны быть действительными указателями на объекты соответствующего типа.
Если вы действительно хотите документировать это и на исходном уровне, у C99 есть способ, используя:
void foo(int x[static 1]);
вместо одного из следующих:
void foo(int *x);
void foo(int x[]);