Live data from Hacker News

Int a = 5; a = a++ + ++a; a =? (2011)

gynvael.coldwind.pl

161–170 of 246 posts

Re: Int a = 5; a = a++ + ++a; a =? (2011)

#161

I had to fight through school and university in India with my teachers who believed these were legit questions to ask in written exams. Can't 100% blame them since almost all standard-issue textbooks had them and claimed they'd give predictable output. I thought the same until I noticed the weirdness when running them across different compilers and after I read about UB, sequence points and similar quirks in books th…

But what answer did they expect? A specific number or that it's UB?

Re: Int a = 5; a = a++ + ++a; a =? (2011)

#162
post #74
post #23

Earlier quoted context omitted.

IMO, The only reasonable answer if asked this in an interview is “I would not write code where I have to know the answer to this question” These sorts of things are neat trivia to learn about things like sequence points but 99.9% of the time if it matters in your codebase you're writing something unmaintainable.

> IMO, The only reasonable answer if asked this in an interview is “I would not write code where I have to know the answer to this question” That's half of a reasonable answer. The other half is "but I do know the answer so if I see it when reviewing or working on someone else's code I can flag it or rewrite it, and explain to them why it is bad".

  > The other half is "but I do know the answer
Except you don't!

If you claim to know the answer you've made a grave mistake and fooled yourself.

If you ran the code in a compiler and used that to conclude "this is the answer" rather than "this is an answer" then now is a great time to learn how easy it is to fool yourself. You just need you ask yourself what assumptions you made. I'll wager you assumed all compilers process this line in the same way.

Or just RTFA, or Susam's, as that's exactly what they are about. They explain why this is undefined behavior.

  | The first principle is that you must not fool yourself — and you are the easiest person to fool.
  - Feynman

Re: Int a = 5; a = a++ + ++a; a =? (2011)

#163
post #132

Earlier quoted context omitted.

I don't see the name "thaumasiotes" at that link, nor do I see anything relevant to the code in the title. The behavior of "int a = 5; a = a++ + ++a;" is undefined. There is no guarantee of a numeric result, because there is no guarantee of anything .

It's only the order of evaluation that is undefined.

No, the behavior is undefined. That means, quoting the ISO C standard, "behavior, upon use of a nonportable or erroneous program construct or of erroneous data, for which this document imposes no requirements".

A conforming implementation could reject it at compile time, or generate code that traps, or generate code that set a to 137, or, in principle, generate code that reformats your hard drive. Some of these behaviors are unlikely, but none are forbidden by the language standard.

Re: Int a = 5; a = a++ + ++a; a =? (2011)

#164
post #152

I am, thankfully, out of this craziness now but it was fun solving ton of such puzzles from Yashavant Kanetkar books while preparing for campus hiring interviews back in 2000. "Test Your C Skills" in particular. Fun times. https://www.scribd.com/document/235004757/Test-Your-C-Skills...

"Test Your C Skills" is a published book by Yashavant Kanetkar, apparently published in 2005, and still available in paperback. The document you linked to appears to be a scan of a printed copy of that book, and is almost certainly in violation of copyright. The cover and the title and copyright pages are notably missing.

That's worth being aware of, though somewhere around 20 years is where I start caring a lot less about copyright from a moral or practical point of view. Yeah, that book stays out of the public domain until the next century, but it shouldn't.

Re: Int a = 5; a = a++ + ++a; a =? (2011)

#165

Earlier quoted context omitted.

No it isn't. You don't need to know the answer to know that it is bad code. The very fact that it isn't clear shows that.

Right, the feedback I'd expect in a code review interview is something like "This is unclear or wrong, write what you actually meant". That's the feedback I would want, and it's the feedback I give to my colleagues in reviews. Actually I tend to be too verbose, so you might get a full paragraph explaining what the ISO document says and that you shouldn't assume it does whatever it is your compiler says. My actual fee…

  > Actually I tend to be too verbose, so you might get a full paragraph explaining what the ISO document
I'm verbose too, but I love it when others are. Honestly, it's usually easy to triage (and I write to try to make it easy). I like verbosity because learning why means I not only won't make that mistake again but I won't make any similar mistakes again.

Verbosity isn't bad. Not everything needs to be a fucking tweet

Re: Int a = 5; a = a++ + ++a; a =? (2011)

#167
For understanding this type of question, I highly recommend the C FAQ compiled by Steve Summit based on Usenet discussions in the comp.lang.c newsgroup.

You should start here:

https://c-faq.com/expr/evalorder2.html

I cannot recommend the C FAQ enough. It is written in an accessible way and contains proper references to textbooks and standards.

Disclosure: I was one of the contributors.

Re: Int a = 5; a = a++ + ++a; a =? (2011)

#168
I still don't understand why programmers seemed to get off on this sort of shit. Doing `while((dest++ = src++));` is great and all (maybe fine because it's kinda idiomatic now, but should you really be using that over `strncpy`?), but being clever like that in real code makes it harder to review, and harder to understand months down the line. I've mentally cussed out 'whoever wrote this confusing shit' to only `git blame` myself.
Post reply on HN