3 ms·
Hopefully Pizlo will correct me if I get this wrong, but I don't think Fil-C's pointer tagging enforces constness, which isn't needed for C in any case. This C
by kragen 1y ago
Hopefully Pizlo will correct me if I get this wrong, but I don't think Fil-C's pointer tagging enforces constness, which isn't needed for C in any case. This C code compiles with no warnings and outputs "Howlong\n" with GCC 12.2.0-14 -ansi -pedantic -Wall -Wextra:
#include <stdio.h>
int main()
{
const char c[] = "Howling\n";
char *p = (char*)c;
p[4] = 'o';
printf("%s", c);
return 0;
}
Somewhat to my surprise, it still compiles successfully with no warnings as C++ (renaming to deconst.cc and compiling with g++). I don't know C++ that well, since I've only been using it for 35 years, which isn't nearly long enough to learn the whole language unless you write a compiler for it.
Same results with Debian clang (and clang++) version 14.0.6 with the same options.
Of course, if you change c[] to *c, it will segfault. But it still compiles successfully without warnings.
Laundering your pointer through an integer is evidently not necessary.
- jibal 1y agoDid you compile with -Wcast-qual?
- kragen 1y agoNo, that does give a warning.
- pizlonator 1y agoFil-C capabilities have a read only bit of this purpose.
- kragen 1y agoInteresting, so you really can enforce constness on references? Does that mean the above code will crash on Fil-C?
- mbrock 1y agoI tried it and it doesn't crash when compiled with Fil-C, FYI. But I guess it wouldn't be too hard to implement.
- pizlonator 1y agoJust using const in C isn’t enough, since C’a const is unsound, so I ignore it. But if you try to write to a readonly global constant then you’ll panic. And there are a handful of ways to allocate readonly data via Fil-C’s APIs.
- jacquesm 1y ago> Just using const in C isn’t enough, since C’a const is unsound, so I ignore it. And now I have confused faces looking at me why I just laughed out loud.
- einsteinx2 1y ago> I don't know C++ that well, since I've only been using it for 35 years Ok that got a chuckle out of me haha
- cryptonector 1y ago> > I don't know C++ that well, since I've only been using it for 35 years, which isn't nearly long enough to learn the whole language unless you write a compiler for it. No one person could write a compiler for it, and even if they could they would forget as much in doing so as they could learn.
- kragen 1y agoWalter Bright did, although maybe C++ has gotten enough bigger since then that your statement has become true.