3 ms·
According to the fine standard, an implementation may #define NULL as either #define NULL ((void *) 0) or just plain #define NULL 0 The latter works cor
by cjensen 10y ago
According to the fine standard, an implementation may #define NULL as either
#define NULL ((void *) 0)
or just plain
#define NULL 0
The latter works correctly because a literal 0 in pointer context is interpreted by the compiler as a null pointer.
If it is 0, the printf() provides no pointer context, so the 0 is interpreted as an int. That works... poorly if sizeof (int) < sizeof (void *)
- loeg 10y agoI see (C99/C11 §6.3.2.3, #3). So the latter NULL definition only works poorly for variadic functions. Is there any reason for an implementation to elect to use the non-casted version of NULL? It seems like an oversight.
- deleted 10y ago[deleted]
- acveilleux 10y agoMaybe arch with variable width pointer types like some embedded platforms?
- loeg 10y agoHow is integer zero better in that scenario, though? The (void-star)0 pointer can still be cast to the correct type (and will be for everything except variadic functions like printf).