Re: A: a new bug to old plain C
Henrik Holst via Gcc-help <[email protected]>
| Newsgroups | gmane.comp.gcc.help |
|---|---|
| Message-ID | <CAGwK9dwaeGOyWCUvvfhXgML1BDVEhCGUPDBGa37WCfOmGW06Nw@mail.gmail.com> |
no they are not, they are a WIKIfication of the C specification, in particular the heading "Why am I getting an error converting a Foo** → const Foo**?" in an official FAQ from the C Standards Committee should make you realize this. /HH Den mån 24 nov. 2025 kl 18:45 skrev Александр Поваляев <[email protected] >: > The articles mentioned are all about coding practices ("safe" and > "unsafe"). They are not about bugs in compilers and hard restrictions being > placed on where I can use "const" in my code and where I can't. :) > > The links mentioned earlier just give a recommendation to use "Foo** -> > const Foo * const *" conversion instead of "Foo** -> const Foo**". > Literally, what I am saying is that: "if you can use const, you should use > it". And this is the case which just confirms my attitude. > But again, this is about coding practices and recommendations. There is no > place in C and C++ standards saying "DON"T USE CONST EVEN IF YOU CAN DO IT. > WE'RE PROHIBITING THIS". > > And so, what GCC compiler (+ some SDKs) is doing now is just the opposite > to the recommendation mentioned. It restricts the places where "const" > might be used. > Anyway, it is a BUG (BIG BUG!!!) in the GCC + SDK. And the BUG was not > made intentionally to protect software engineers from using "unsafe coding > practices" :))))) > For such kind of practices, there are warnings with information messages. > And the bug in GCC should be (1) reported; (2) nailed down and (3) fixed. > > Respectfully, > Aleksandr G Povaliaev. > > > пн, 24 нояб. 2025 г. в 16:10, Henrik Holst <[email protected]>: > >> >> >> Den mån 24 nov. 2025 kl 13:40 skrev Александр Поваляев < >> [email protected]>: >> >>> Hi there! >>> >>> "False sense of security". Const is a hint to any C compiler to make >>> code more error-prone. So, it is always better to use as much "const" as >>> possible. >>> My point is that "if const might be used, it SHOULD be used". That is >>> the cornerstone. >>> I want to use it, so GCC compiler + SDK should make it possible. It is >>> my code and my design decisions being undertaken. >>> >>> All discussions if it is possible to overcome or not "Const" restriction >>> is irrelivant here. >>> >> no it is not irrelevant here because if I declare a variable as const in >> my local code the value should not be changed by other code either, look at >> the code in the link given to you earlier which shows just such a case as >> an example on why this is not allowed in C. >> >> /HH >> >>> >>> Respectfully, >>> Aleksandr G Povaliaev. >>> >>> пн, 24 нояб. 2025 г. в 13:46, Henrik Holst <[email protected] >>> >: >>> >>>> The things is that this is unsafe and invalid due to it creating a >>>> false sense of security. Aka your "const Foo *" can change under your feet >>>> by _other_ code leading to your const here giving you a false sense of >>>> security. Yes it prevents you from modifying it locally but not some other >>>> code or thread from modifying your const pointer to now point to something >>>> else, hence the compiler issues an error here since you do not get what you >>>> think you are getting. >>>> >>>> /HH >>>> >>>> Den mån 24 nov. 2025 kl 11:10 skrev Александр Поваляев via Gcc-help < >>>> [email protected]>: >>>> >>>>> Hi there! >>>>> >>>>> The code is not invalid and neither of the links posted saying that >>>>> "const >>>>> Foo * const * const" is invalid construction for C. >>>>> The links posted just are discussing that it might be UNSAFE to cast >>>>> "Foo >>>>> **" -> "const Foo **" and recommending usage of "Foo **" -> "const Foo >>>>> * >>>>> const *" instead. >>>>> It's OK. If you feel that it is unsafe, please don't use it. It is >>>>> your own >>>>> decision. >>>>> >>>>> But the syntax itself "const Foo * const * const" is correct and the >>>>> use-case I mentioned is quite simple and evident. >>>>> And so I need this code snipped to be compiled transparently over all >>>>> the >>>>> GCC (and platform SDKs) available versions. >>>>> >>>>> Respectfully, >>>>> Aleksandr G Povaliaev. >>>>> >>>>> >>>>> пн, 24 нояб. 2025 г. в 01:48, David Brown <[email protected]>: >>>>> >>>>> > On 23/11/2025 21:45, Александр Поваляев via Gcc-help wrote: >>>>> > > Hi there! >>>>> > > >>>>> > >>>>> > This is getting /extremely/ frustrating. /Please/ find some way to >>>>> > learn the C programming language - courses, books, good online >>>>> resources. >>>>> > >>>>> > And /please/ believe me when I say that people who have worked with C >>>>> > and C++ for decades, studied the standards, who serve on the >>>>> standards >>>>> > committee, know better about these things than you do. (I'm talking >>>>> > about Jonathan here, not myself - he really is a world-class expert >>>>> here.) >>>>> > >>>>> > > Either the links you've provided or the links you provided earlier >>>>> > > (yesterday) are irrelevant, cause they are just discussing if it >>>>> is safer >>>>> > > to convert "Foo_Type **" to "const Foo_Type **" or not. >>>>> > > >>>>> > >>>>> > The links are highly relevant. They explain why you cannot convert >>>>> from >>>>> > "char **" to "const char **". That also explains why you cannot >>>>> convert >>>>> > from "char **" to "const char * const * const". Adding even more >>>>> > "const" qualifiers to the invalid conversion does not somehow >>>>> magically >>>>> > make it work. >>>>> > >>>>> > > Once again, we are not converting "char** to const char**", we're >>>>> > > converting char** to const char * const * const". >>>>> > > And we're not discussing if it is safer or not, we are discussing >>>>> GCC >>>>> > > compiler error. >>>>> > > >>>>> > >>>>> > The compiler is generating an error message because you wrote invalid >>>>> > code. The error - or bug, if you like - is in /your/ code. Not the >>>>> > compiler. GCC is doing its job correctly here. >>>>> > >>>>> > > >>>>> > > Respectfully, >>>>> > > Aleksandr G Povaliaev. >>>>> > > >>>>> > >>>>> > I'm sorry, but signing the post with "respectfully" does not make it >>>>> > respectful. You started the thread disrespectfully - insisting that >>>>> > there is a bug in GCC when you simply do not understand the relevant >>>>> > aspects of the C programming language. And you have gone downhill >>>>> since >>>>> > then, ignoring and rejecting the help and advice you have been given. >>>>> > Getting things wrong once is entirely understandable - this is a >>>>> subtle >>>>> > point of the C language, and you are posting to a "help" list. >>>>> Doubling >>>>> > down on your ignorance when you have received the help and >>>>> information >>>>> > you need, is a different matter entirely. >>>>> > >>>>> > Your code is flawed. You need to fix it. Mindlessly repeating your >>>>> > misunderstandings about how you think C works will not do anything >>>>> but >>>>> > annoy people. >>>>> > >>>>> > David >>>>> > >>>>> > >>>>> >>>>