Re: A: a new bug to old plain C
David Brown via Gcc-help <[email protected]>
| Newsgroups | gmane.comp.gcc.help |
|---|---|
| Message-ID | <[email protected]> |
On 26/11/2025 07:14, Александр Поваляев via Gcc-help wrote: > Hi there! So, any update on this? > > Could somebody point out where in the C standard a conversion "Foo**" -> > "const Foo * const * const" is prohibited? > Any link? Some quote from any book on C language? > The C standard does not describe what is prohibited - it describes what is /allowed/. Get a copy of whatever version of the C standard you want to use (draft versions are freely available that are virtually identical to the official costly versions). Read about compatible types, and assignment operators. Since the conversion you want does not match any of the allowed constraints for the initialisation (which follows the rules of assignments), it is not allowed. You are not going to find a list of all the things the C standard does not allow - that would be never-ending. If you prefer a reference webpage, look at this : <https://en.cppreference.com/w/c/language/operator_assignment.html> <https://en.cppreference.com/w/c/language/compatible_type.html#Compatible_types> That site is not the standard itself, but it is maintained in collaboration with the C and C++ standards committees, and provides the same information in a format that is usually a little easier to read. You seem to be under the impression that people are telling you not to write your code because it is "unsafe", or giving opinions about how we like to write code. We are telling you the /facts/ about what implicit conversions are allowed and disallowed, according to the C standards. No one cares about whether you think your code is "safe" or not. No one cares that your code is valid C++ - it is not correct C code, and conforming C compilers are /required/ to complain about it. Some other shitty C compiler might complain about it and yet still let you compile the bad code. Or maybe you have no idea how to use your tools correctly, and have been using other C++ compilers instead of C compilers. The GCC /C/ compiler rejects your code because it is incorrect code - the C standards do not allow it. And there is /zero/ chance that someone is going to break the GCC C compiler here just to support your misconceptions. Ironically, I believe there is a proposal to change some of these compatible type rules to bring C more in line with C++ in regards to "const" and pointers. So when the next C standard comes out, there's a good chance that your code will be valid - for C2y onwards, but still not for C23 or earlier (it's a new feature, not a backwards-working defect report). Since you are so unwilling to learn anything here, perhaps your best course of action would be to take a break from C programming for a few years, then update your tools and try again. Perhaps by 2029 or 2030, that new standard will be published and gcc will use it by default, thus "fixing" the problem in your code. (It won't fix the major problem - your inability to comprehend anything people tell you.)