c-ringbuf icon indicating copy to clipboard operation
c-ringbuf copied to clipboard

conflicting declaration 'typedef struct ringbuf_t * ringbuf_t:;

Open zcattacz opened this issue 2 years ago • 5 comments


Issue description

conflicting declaration 'typedef struct ringbuf_t * ringbuf_t;

32 typedef struct ringbuf_t *ringbuf_t
                                                  ^~~~~~
note: previous declaration as 'struct ringbuf_t' 

32 typedef struct ringbuf_t *ringbuf_t
                                ^~~~~~~

Steps to reproduce

Technical details

Hi, thanks for this elegant lib. Just trying to use this in an ESP8266 arduino project. The above definition is preventing compilation. It seems that it does like types to use the same name as the struct it is pointing to, I tried to change the type name, things seems to start to work, but it's really messy. Could you shed some light on how to fix this? Not sure if this is related, I can see -std=gnu++17 flag in detailed compile log.

Regards

zcattacz avatar Jun 17 '22 09:06 zcattacz

Hi, what C compiler are you using? Also, if you could put the full compile log somewhere I can see it (e.g., gist.github.com), that would be helpful.

dhess avatar Jun 17 '22 10:06 dhess

Hi, sorry, this is not a C project issue. I just noticed, the arduino project is a c++ project 😣. I have adapt the code to make it work.

For now I renamed the new type to ringbuf_p ...
I didn't find any explicit information on whether deftype as same name like above is possible or not in cpp. Would appreciate some guidance.

Thank you for your attention.

zcattacz avatar Jun 17 '22 12:06 zcattacz

My C and C++ are rusty, but I can't think of any reason why the code in this project wouldn't be valid C++. I will see if I can find some time this weekend to build it with g++ or clang in C++ mode.

dhess avatar Jun 17 '22 14:06 dhess

Indeed, C++ is pickier about typedefs that use the same name as an existing type, and also wants a few additional typecasts.

Try this branch:

https://github.com/dhess/c-ringbuf/tree/dhess/c++-fixes

The tests will need more work to make them C++-compliant, but ringbuf.[ch] should be fine now.

dhess avatar Jun 17 '22 15:06 dhess

Thanks for the library.

Agreed that it would be good to avoid this pattern of not having the struct in the header, and instead having a reciprocal typedef (i'm not sure what this is designed to do exactly also).

I'm including the lib in an extern "C" { so it should be C compatible. Compiler is gcc for STM32.

elliotwoods avatar Aug 09 '23 09:08 elliotwoods