Blesk

vla.c

Stáhnout

#include <stdio.h>      /* printf */
#include <stdlib.h>     /* strtol */

int main( int argc, char **argv )
{
    if ( argc < 2 )
    {
        printf( "Usage: %s number \n", argv[ 0 ] );
        return 1;
    }

    char buf[ 1234 ];

    printf( "sizeof( buf ) ~>* %zu\n", sizeof( buf ) );

    int runtime = strtol( argv[ 1 ], 0, 0 );

    char vla[ runtime ];

    /* ‹sizeof› je magická věc, která je schopna prozradit i velikost
     * pole proměnné délky */
    printf( "char vla[ %d ]\n", runtime );
    printf( "sizeof( vla ) ~>* %zu\n", sizeof( vla ) );

    const int i = 1234;
    char whatami[ i ];

    printf( "sizeof( whatami ) ~>* %zu\n", sizeof( whatami ) );

    enum ahoj
    {
        /* ok, protože ‹sizeof buf› je konstantní hodnota za překladu */
        one = sizeof buf,

        /* error, protože ‹enum› neakceptuje nekonstantní hodnoty */
        // two = sizeof vla,

        /* je ‹whatami› VLA, nebo obyčejné pole? */
        // thr = sizeof whatami,
    };
    return 0;
}