[cfe-dev] sizeof(sizeof(...))

Ted Kremenek kremenek at apple.com
Fri Dec 14 16:43:50 PST 2007

On Dec 14, 2007, at 4:27 PM, Pierre Habouzit wrote:

> On Fri, Dec 14, 2007 at 08:30:59PM +0000, Ted Kremenek wrote:
>> Does anyone have any insights on the semantics of expressions of the
>> form sizeof(sizeof(...))?  For example, the following is legal code:
>> int baz(int x) {
>>  typedef int a[f()];
>>  return sizeof (sizeof(a[bar(x)]));
>>         + sizeof(sizeof(x));
>> }
> I don't get the reason why someone would do that, but afaict sizeof  
> is a
> size_t (not an unsigned int) so sizeof(sizeof(a[bar(x)])) is just
> sizeof(size_t). I don't have my C norm at hand, but at least gcc
> believes that sizeof "returns" a size_t since its printf format  
> checker
> complains if I use "%d" and definitely wants "%zd".

Right.  IIRC, size_t can be target specific.  On Mac OS X (x86), clang  
reports the type of sizeof() as being unsigned long (I believe I may  
have previously said unsigned int).

More information about the cfe-dev mailing list