sizeof( function )

Brian Dessent brian@dessent.net
Tue Jun 12 16:38:00 GMT 2007


Mihai Don?u wrote:

> Not that is of great importance, but does anyone know why
> 
> int main( void )
> {
>         return printf( "%d\n", ( int )sizeof( main ) );
> }
> 
> prints 1 ? :)
> 
> (sizeof( &main ) prints 4/8 as it should)

In this context 'main' is a function type, i.e. a type that describes a
function of a given return type and a given number and type of arguments
(C99 §6.2.5 para. 20).  It is invalid to use sizeof() with a function
type expression (C99 §6.5.3.4 para. 1) and hence this code invokes
undefined behavior.  gcc gives a warning if you compile with -pedantic,
but otherwise it apparently just returns 1; it would be equally within
its rights to return 42 or to generate code to format the users hard
drive -- that is the nature of undefined behavior.

Brian



More information about the Gcc-help mailing list