Verifiably better, validated Enum for Python
bartc
bc at freeuk.com
Fri May 26 10:10:29 EDT 2017
On 26/05/2017 12:46, Steve D'Aprano wrote:
> On Thu, 25 May 2017 11:26 am, Chris Angelico wrote:
>> And why should they try to stop you? The whole point of undefined
>> behaviour is that you shouldn't be doing this, so if you do, the
>> interpreter's allowed to do anything.
>
> Does the C specification actually refer to this as undefined? I'm not a C
> expert, but it seems to me that it is defined as an error. I tried
> compiling that code:
>
>
> [steve at ando c]$ cat stringassign.c
> #include <stdio.h>
> #include <stdlib.h>
>
> int main(int argc, char *argv[])
> {
> "abcdef"[3] = 'z';
> puts("abcdef");
> return 0;
> }
> [steve at ando c]$ gcc stringassign.c
> stringassign.c: In function ‘main’:
> stringassign.c:6: error: assignment of read-only location
>
>
> but I couldn't get it to succeed.
Compilers will vary.
In gcc for Windows, I get the same message but as a warning.
With DMC, nothing. With Pelles C, nothing. With lccwin, nothing. With
Tiny C, nothing. With MSVC 2008, nothing.
(Only my own compiler will give a hard error, but that's because I
specify detect that. In general, the language can't stop you writing to
such a string, one way or another.)
Note that compiled as C++, I think this has to fail (because string
literals have slightly different types compared with C).
--
bartc
More information about the Python-list
mailing list