Будет ли void*
иметь такое же представление, как char*
?
Детали:
Я хочу работать с вариационной функцией, которая принимает char *, завершаемую (char*)0
следующим образом:
int variadic(char*, ...); //<-prototype
variadic("foo", "bar", (char*)0); //<- usage
Я хотел заменить (char*)0
на NULL
, но, судя по
http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf:
66) Макрос NULL определяется в (и других заголовках) как константа нулевой указатель; см. 7.19.
3 Целочисленное постоянное выражение со значением 0 или такое выражение, отличное от типа void *, называется константой нулевого указателя. 66) Если константа нулевого указателя преобразуется в тип указателя, полученный указатель, называемый нулевым указателем, гарантированно сравнится не соответствует указателю на любой объект или функцию.
Я не могу, потому что в контексте variadic
мне абсолютно необходим char*
, а простой 0
неприемлем.
Если я определил:
#define NIL (void*)0 /*<= never a plain 0*/
было бы законным для меня использовать его для завершения моего variadic(char*,...)
?