Will a void*
always have the same representation as a char*
?
Details:
I want to work with a variadic function that takes char*'s terminated by a (char*)0
like so:
int variadic(char*, ...); //<-prototype
variadic("foo", "bar", (char*)0); //<- usage
I wanted to replace (char*)0
with NULL
, but judging from
http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf's:
66) The macro NULL is defined in (and other headers) as a
null pointer constant; see 7.19.
3 An integer constant expression with the value 0, or such an
expression cast to type void *, is called a null pointer constant. 66)
If a null pointer constant is converted to a pointer type, the
resulting pointer, called a null pointer, is guaranteed to compare
unequal to a pointer to any object or function.
I can't, because in the variadic
context, I absolutely need a char*
and a plain 0
is unacceptable.
If I defined:
#define NIL (void*)0 /*<= never a plain 0*/
would it be legal for me to use it to terminate my variadic(char*,...)
?
See Question&Answers more detail:
os 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…