top | item 4654030

Can code that is valid in both C and C++ produce different behavior?

83 points| ivoflipse | 13 years ago |stackoverflow.com | reply

9 comments

order
[+] CJefferson|13 years ago|reply
Interesting discussion. I can honestly say that I have never seen any of these come up.

In case anyone is worried, the sizeof('i') one looks, at first glance, like the most worrying one.

However, it is less serious than it might look. Given "char c;", sizeof(c) evaluates to 1 in both languages, it is just a single character constant like 'i' which causes a possible problem.

For anyone curious why, I'm not sure why character constants are int in C, but in pure C I think it is impossible to tell that a character literal is an int (as there is no function overloading, or type deductions).

In C++ however, with function overloading, we can tell. In particular, we really want:

std::cout << 1 << 'i' << std::endl;

To print the number 1, followed by the letter i. Therefore we need the letter i to be of type char, rather than another int.

(Fixed last 'C' to 'C++' : Thanks dbaupp)

[+] lmm|13 years ago|reply
That answer feels like a cheat to me - aren't both sizeofs implementation defined, so it would be possible (although arguably silly) to have an implementation where char and int were the same size?
[+] dbaupp|13 years ago|reply
(Presumably you mean "In C++" for the second one?)
[+] finnw|13 years ago|reply
It's nice to see a HN submission of an on-topic stackoverflow question (instead of all the off-topic ones that get submitted, followed by comments complaining about the question being closed on SO.)
[+] sturmeh|13 years ago|reply
I'm sure you could get different behaviours with some fancy use of pointers and reference notation.