Search code examples
cstructtypedef

typedef struct but keep new type namespaced under keyword 'struct'


How can I typedef a struct but still keep the new type namespaced under the keyword 'struct'?

example:

struct foo {
    int x; 
}; 

typedef struct foo struct bar; 


int main(void) {
    struct bar bar; 
    bar.x = 10; 

    return 0; 
}

but this doesn't work obviously. Here are the errors if anyone is curious:

main.c:5:20: error: two or more data types in declaration specifiers
 typedef struct foo struct bar;
                    ^
main.c:5:27: warning: useless storage class specifier in empty declaration
 typedef struct foo struct bar;
                           ^
main.c: In function 'main':
main.c:9:13: error: storage size of 'bar' isn't known
  struct bar bar;

Solution

  • How can I typedef a struct but still keep the new type namespaced under the keyword 'struct'?

    So, it seems that you want to define a structure alias for another structure type.

    This is not possible with typedef as it creates a single word alias. The new alias can't be consisted of multiple white space separated words.

    But you can use a single name like struct_bar with struct implemented inside of the name to show that bar is a structure.

    #include <stdio.h>
    
    struct foo {
        int x; 
    }; 
    
    typedef struct foo struct_bar;
    
    
    int main(void) {
        struct_bar bar;
        bar.x = 10; 
    
        return 0; 
    }