Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > comp.lang.c > #168574 > unrolled thread
| Started by | Roman P <invalid@example.com> |
|---|---|
| First post | 2022-12-18 20:00 +0000 |
| Last post | 2022-12-21 12:02 +0100 |
| Articles | 5 on this page of 45 — 18 participants |
Back to article view | Back to comp.lang.c
Christmas Quiz 2022 Roman P <invalid@example.com> - 2022-12-18 20:00 +0000
Re: Christmas Quiz 2022 Tony Oliver <guinness.tony@gmail.com> - 2022-12-18 13:18 -0800
Re: Christmas Quiz 2022 Keith Thompson <Keith.S.Thompson+u@gmail.com> - 2022-12-18 16:48 -0800
Re: Christmas Quiz 2022 Tim Rentsch <tr.17687@z991.linuxsc.com> - 2022-12-18 17:18 -0800
Re: Christmas Quiz 2022 "Chris M. Thomasson" <chris.m.thomasson.1@gmail.com> - 2022-12-19 19:39 -0800
Re: Christmas Quiz 2022 Niles Rogoff <eternal-september@niles.xyz> - 2022-12-27 01:22 -0800
Re: Christmas Quiz 2022 Öö Tiib <ootiib@hot.ee> - 2022-12-27 01:58 -0800
Re: Christmas Quiz 2022 Keith Thompson <Keith.S.Thompson+u@gmail.com> - 2022-12-27 10:25 -0800
Re: Christmas Quiz 2022 James Kuyper <jameskuyper@alumni.caltech.edu> - 2022-12-27 05:07 -0500
Re: Christmas Quiz 2022 scott@slp53.sl.home (Scott Lurndal) - 2022-12-27 16:06 +0000
Re: Christmas Quiz 2022 scott@slp53.sl.home (Scott Lurndal) - 2022-12-27 17:42 +0000
Re: Christmas Quiz 2022 Keith Thompson <Keith.S.Thompson+u@gmail.com> - 2022-12-27 13:53 -0800
Re: Christmas Quiz 2022 Niles Rogoff <eternal-september@niles.xyz> - 2022-12-27 01:24 -0800
Re: Christmas Quiz 2022 scott@slp53.sl.home (Scott Lurndal) - 2022-12-27 16:07 +0000
Re: Christmas Quiz 2022 Ben Bacarisse <ben.usenet@bsb.me.uk> - 2022-12-18 21:22 +0000
Re: Christmas Quiz 2022 Lew Pitcher <lew.pitcher@digitalfreehold.ca> - 2022-12-18 21:40 +0000
Re: Christmas Quiz 2022 Tim Rentsch <tr.17687@z991.linuxsc.com> - 2022-12-18 17:02 -0800
Re: Christmas Quiz 2022 Tim Rentsch <tr.17687@z991.linuxsc.com> - 2022-12-18 17:20 -0800
Re: Christmas Quiz 2022 red floyd <no.spam.here@its.invalid> - 2022-12-18 13:36 -0800
Re: Christmas Quiz 2022 "Chris M. Thomasson" <chris.m.thomasson.1@gmail.com> - 2022-12-18 13:48 -0800
Re: Christmas Quiz 2022 Siri Cruise <chine.bleu@yahoo.com> - 2022-12-18 14:57 -0800
Re: Christmas Quiz 2022 "Chris M. Thomasson" <chris.m.thomasson.1@gmail.com> - 2022-12-18 15:43 -0800
Re: Christmas Quiz 2022 Lynn McGuire <lynnmcguire5@gmail.com> - 2022-12-19 23:40 -0600
Re: Christmas Quiz 2022 "Chris M. Thomasson" <chris.m.thomasson.1@gmail.com> - 2022-12-20 14:01 -0800
Re: Christmas Quiz 2022 Kaz Kylheku <864-117-4973@kylheku.com> - 2022-12-20 13:49 +0000
Re: Christmas Quiz 2022 Ben Bacarisse <ben.usenet@bsb.me.uk> - 2022-12-20 14:33 +0000
Re: Christmas Quiz 2022 Lew Pitcher <lew.pitcher@digitalfreehold.ca> - 2022-12-20 14:44 +0000
Re: Christmas Quiz 2022 Ben Bacarisse <ben.usenet@bsb.me.uk> - 2022-12-20 14:57 +0000
Re: Christmas Quiz 2022 Lew Pitcher <lew.pitcher@digitalfreehold.ca> - 2022-12-20 15:03 +0000
Re: Christmas Quiz 2022 David Brown <david.brown@hesbynett.no> - 2022-12-20 16:32 +0100
Re: Christmas Quiz 2022 Lew Pitcher <lew.pitcher@digitalfreehold.ca> - 2022-12-20 15:41 +0000
Re: Christmas Quiz 2022 Keith Thompson <Keith.S.Thompson+u@gmail.com> - 2022-12-20 10:22 -0800
Re: for() syntax (Was: Christmas Quiz 2022) Lew Pitcher <lew.pitcher@digitalfreehold.ca> - 2022-12-20 18:54 +0000
Re: for() syntax Keith Thompson <Keith.S.Thompson+u@gmail.com> - 2022-12-20 12:08 -0800
Re: for() syntax (Was: Christmas Quiz 2022) Tim Rentsch <tr.17687@z991.linuxsc.com> - 2022-12-26 06:48 -0800
Re: Christmas Quiz 2022 Tim Rentsch <tr.17687@z991.linuxsc.com> - 2022-12-26 06:25 -0800
Re: Christmas Quiz 2022 Tim Rentsch <tr.17687@z991.linuxsc.com> - 2022-12-26 06:24 -0800
Re: Christmas Quiz 2022 Keith Thompson <Keith.S.Thompson+u@gmail.com> - 2022-12-26 13:05 -0800
Re: Christmas Quiz 2022 Andrey Tarasevich <andreytarasevich@hotmail.com> - 2022-12-20 12:46 -0800
Re: Christmas Quiz 2022 Paavo Helde <eesnimi@osa.pri.ee> - 2022-12-20 23:49 +0200
Re: Christmas Quiz 2022 Andrey Tarasevich <andreytarasevich@hotmail.com> - 2022-12-20 14:00 -0800
Re: Christmas Quiz 2022 Paavo Helde <eesnimi@osa.pri.ee> - 2022-12-21 00:13 +0200
Re: Christmas Quiz 2022 Andrey Tarasevich <andreytarasevich@hotmail.com> - 2022-12-20 14:38 -0800
Re: Christmas Quiz 2022 Andrey Tarasevich <andreytarasevich@hotmail.com> - 2022-12-20 21:31 -0800
Re: Christmas Quiz 2022 David Brown <david.brown@hesbynett.no> - 2022-12-21 12:02 +0100
Page 3 of 3 — ← Prev page 1 2 [3]
| From | Andrey Tarasevich <andreytarasevich@hotmail.com> |
|---|---|
| Date | 2022-12-20 14:00 -0800 |
| Message-ID | <tntb9j$q06h$1@dont-email.me> |
| In reply to | #168622 |
On 12/20/2022 1:49 PM, Paavo Helde wrote: > 20.12.2022 22:46 Andrey Tarasevich kirjutas: > >>> 4) What is the difference between x = y++; and x = ++y;? >> >> Quite possibly, none. There's no reason to believe this code has any >> observable behavior. > > I guess he got you there. The value of x is observable. Too well-defined > question? I don't know what you are trying to say by "the value of x is observable", but let me reiterate: there's no reason to believe this code has any observable behavior. (Feel free to look up the definition.) Let alone the fact that in C++ it has no specific semantics at all. -- Best regards, Andrey
[toc] | [prev] | [next] | [standalone]
| From | Paavo Helde <eesnimi@osa.pri.ee> |
|---|---|
| Date | 2022-12-21 00:13 +0200 |
| Message-ID | <tntc2r$ptr7$2@dont-email.me> |
| In reply to | #168623 |
21.12.2022 00:00 Andrey Tarasevich kirjutas:
> On 12/20/2022 1:49 PM, Paavo Helde wrote:
>> 20.12.2022 22:46 Andrey Tarasevich kirjutas:
>>
>>>> 4) What is the difference between x = y++; and x = ++y;?
>>>
>>> Quite possibly, none. There's no reason to believe this code has any
>>> observable behavior.
>>
>> I guess he got you there. The value of x is observable. Too
>> well-defined question?
>
> I don't know what you are trying to say by "the value of x is
> observable", but let me reiterate: there's no reason to believe this
> code has any observable behavior. (Feel free to look up the definition.)
> Let alone the fact that in C++ it has no specific semantics at all.
The questions were cross-posted to C so I'm assuming int.
#include <iostream>
void f1() {
int y = 0;
int x = y++;
std::cout << "x = " << x << "\n";
}
void f2() {
int y = 0;
int x = ++y;
std::cout << "x = " << x << "\n";
}
int main() {
f1();
f2();
}
Output:
x = 0
x = 1
Different enough?
[toc] | [prev] | [next] | [standalone]
| From | Andrey Tarasevich <andreytarasevich@hotmail.com> |
|---|---|
| Date | 2022-12-20 14:38 -0800 |
| Message-ID | <tntdgj$q76c$1@dont-email.me> |
| In reply to | #168625 |
On 12/20/2022 2:13 PM, Paavo Helde wrote:
> 21.12.2022 00:00 Andrey Tarasevich kirjutas:
>> On 12/20/2022 1:49 PM, Paavo Helde wrote:
>>> 20.12.2022 22:46 Andrey Tarasevich kirjutas:
>>>
>>>>> 4) What is the difference between x = y++; and x = ++y;?
>>>>
>>>> Quite possibly, none. There's no reason to believe this code has any
>>>> observable behavior.
>>>
>>> I guess he got you there. The value of x is observable. Too
>>> well-defined question?
>>
>> I don't know what you are trying to say by "the value of x is
>> observable", but let me reiterate: there's no reason to believe this
>> code has any observable behavior. (Feel free to look up the
>> definition.) Let alone the fact that in C++ it has no specific
>> semantics at all.
>
> The questions were cross-posted to C so I'm assuming int.
>
> #include <iostream>
>
> void f1() {
> int y = 0;
> int x = y++;
> std::cout << "x = " << x << "\n";
> }
>
> void f2() {
> int y = 0;
> int x = ++y;
> std::cout << "x = " << x << "\n";
> }
>
> int main() {
> f1();
> f2();
> }
>
> Output:
>
> x = 0
> x = 1
>
> Different enough?
Oh, yes. Quite different. But this is really an answer to a different
question. Say
What is the difference between
int y = 0;
int x = y++;
std::cout << "x = " << x << "\n";
and
int y = 0;
int x = ++y;
std::cout << "x = " << x << "\n";
?
--
Best regards,
Andrey
[toc] | [prev] | [next] | [standalone]
| From | Andrey Tarasevich <andreytarasevich@hotmail.com> |
|---|---|
| Date | 2022-12-20 21:31 -0800 |
| Message-ID | <tnu5oc$v3nu$1@dont-email.me> |
| In reply to | #168620 |
On 12/20/2022 12:46 PM, Andrey Tarasevich wrote: > On 12/18/2022 12:00 PM, Roman P wrote: > >> 3) What happens when you overflow an int variable, that is, set it to a >> value beyond its range? > > "Set"? What does "set" mean in this context? > > Behavior of variables in out-of-range situations depends critically on > _how_ you attempt to produce an out-of-range value in it. For example, > assignment is one thing, while side effect of `++` is a completely > different thing. > ... although here I'm probably trying to be too smart for my own good: there's no need for this kind of branching. In the end, side effects modify the variable value through assignment as well. This means that trying to "set an int to a value beyond its range" results in a congruent value in C++ and in an implementation-defined value or a signal in C. Overflow-related undefined behaviors that can still occur in signed integer arithmetic are not relevant to this question, since they are not really related to "setting" a variable value. One can still note though that trying to set an int variable to an overly large floating-point value results in UB. Although even here one can argue that the UB occurs as part of the conversion, which happens before the actual "setting". -- Best regards, Andrey
[toc] | [prev] | [next] | [standalone]
| From | David Brown <david.brown@hesbynett.no> |
|---|---|
| Date | 2022-12-21 12:02 +0100 |
| Message-ID | <tnup4t$10r05$1@dont-email.me> |
| In reply to | #168627 |
On 21/12/2022 06:31, Andrey Tarasevich wrote: > On 12/20/2022 12:46 PM, Andrey Tarasevich wrote: >> On 12/18/2022 12:00 PM, Roman P wrote: >> >>> 3) What happens when you overflow an int variable, that is, set it to a >>> value beyond its range? >> >> "Set"? What does "set" mean in this context? >> >> Behavior of variables in out-of-range situations depends critically on >> _how_ you attempt to produce an out-of-range value in it. For example, >> assignment is one thing, while side effect of `++` is a completely >> different thing. >> > > ... although here I'm probably trying to be too smart for my own good: I think we are all trying to be "smart" here - whether we are being /too/ smart is an open question! > there's no need for this kind of branching. In the end, side effects > modify the variable value through assignment as well. > > This means that trying to "set an int to a value beyond its range" > results in a congruent value in C++ and in an implementation-defined > value or a signal in C. Overflow-related undefined behaviors that can > still occur in signed integer arithmetic are not relevant to this > question, since they are not really related to "setting" a variable value. > > One can still note though that trying to set an int variable to an > overly large floating-point value results in UB. Although even here one > can argue that the UB occurs as part of the conversion, which happens > before the actual "setting". > I think there are three things to consider here. First, there is the issue of what the OP meant. Then there are the two different ways to set the value of a variable. Regarding the OP's intention - while this is speculation, I believe he was thinking of signed integer overflow in arithmetic expressions - overflow in the addition part of "x = a + b;" rather than in the assignment part. And in that case, signed integer overflow is undefined behaviour in C and C++, and many compilers optimise on the assumption that it never happens. (A few compilers, like "gcc -fwrapv", give it defined behaviour.) Setting a variable explicitly (whether it be by initialisation, assignment, augmented assignment, or increment/decrement operator side-effects) is a matter of conversion. For an integer type to an int, this is covered in 6.3.1.3. If the value to be converted cannot be represented in the new type (int, in this case), "either the result is implementation-defined or an implementation-defined signal is raised." For almost all compilers, excluding sanitizers or special debug modes, this is done by two's complement wrapping. Conversion from a floating point number that is out of range is undefined behaviour. The other way to change a variable is using memcpy, a character pointer, or a union. These methods affect the underlying representation directly, and do not operate on values - so "overflow" or "range" makes no sense. You can get undefined behaviour later when the value is read, if it is a trap or otherwise does not represent a valid value of the type. (You won't see that with integers, in real-world compilers - but you can see it if you set a _Bool variable to something other than 0 or 1 using memcpy() or a char pointer.)
[toc] | [prev] | [standalone]
Page 3 of 3 — ← Prev page 1 2 [3]
Back to top | Article view | comp.lang.c
csiph-web