Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

How to deconstruct complex C/C++ statements/declarations?

Take the following snippet as an example.

char* const (*(* const bar)[5])(int)

Cannot seem to make sense of it or more so, cannot identify the initial point from where to begin making sense of it.

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

>Solution :

Let’s consider the declaration step by steap

char* const (*(* const bar)[5])(int);

This part

* const bar

declares a constant pointer with the name bar that points to to an array of 5 elements of a pointer type

*(* const bar)[5]

that is pointer to the function type

char* const (int)

Here is a demonstration program.

#include <stdio.h>

char * const f1( int n )
{
    printf( "f1 called with n = %d\n", n );

    return NULL;
}

char *const f2( int n )
{
    printf( "f2 called with n = %d\n", n );

    return NULL;
}

char *const f3( int n )
{
    printf( "f3 called with n = %d\n", n );

    return NULL;
}

char *const f4( int n )
{
    printf( "f4 called with n = %d\n", n );

    return NULL;
}

char *const f5( int n )
{
    printf( "f5 called with n = %d\n", n );

    return NULL;
}

int main( void )
{
    char *const ( *a[5] )( int ) = { f1, f2, f3, f4, f5 };

    for (int i = 0; i < 5; i++)
    {
        a[i]( i );
    }

    putchar( '\n' );

    char *const ( *( *const bar )[5] )( int ) = &a;

    for (int i = 0; i < 5; i++)
    {
        ( *bar )[i]( i );
    }

}

The program output is

f1 called with n = 0
f2 called with n = 1
f3 called with n = 2
f4 called with n = 3
f5 called with n = 4

f1 called with n = 0
f2 called with n = 1
f3 called with n = 2
f4 called with n = 3
f5 called with n = 4

Using typedef declarations could make the declaration of the pointer much more readable.

Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading