sizeof( function )
Martin Krischik
krischik@users.sourceforge.net
Thu Jun 14 12:44:00 GMT 2007
Am 12.06.2007, 19:28 Uhr, schrieb Brian Dessent <brian@dessent.net>:
> 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.
If it is invalid to use sizeof() with a function type expression - why not
an make it an compile time error?
Martin
More information about the Gcc-help
mailing list