Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
724 views
in Technique[技术] by (71.8m points)

c - Will a void* always have the same representation as a char*?

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

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

C11, §6.2.5, ?28 (draft N1570) says:

A pointer to void shall have the same representation and alignment requirements as a pointer to a character type. 48) Similarly, pointers to quali?ed or unquali?ed versions of compatible types shall have the same representation and alignment requirements.

(emphasis mine).


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...