On 2010-09-30, RG <rnospa...@flownet.com> wrote: > That the problem is "elsewhere in the program" ought to be small > comfort.
It is, perhaps, but it's also an important technical point: You CAN write correct code for such a thing. > int maximum(int a, int b) { return a > b ? a : b; } > int main() { > long x = 8589934592; > printf("Max of %ld and 1 is %d\n", x, maximum(x,1)); You invoked implementation-defined behavior here by calling maximum() with a value which was outside the range. The defined behavior is that the arguments are converted to the given type, namely int. The conversion is implementation-defined and could include yielding an implementation-defined signal which aborts execution. Again, the maximum() function is 100% correct -- your call of it is incorrect. You didn't pass it the right sort of data. That's your problem. (And no, the lack of a diagnostic doesn't necessarily prove anything; see the gcc documentation for details of what it does when converting an out of range value into a signed type, it may well have done exactly what it is defined to do.) -s -- Copyright 2010, all wrongs reversed. Peter Seebach / usenet-nos...@seebs.net http://www.seebs.net/log/ <-- lawsuits, religion, and funny pictures http://en.wikipedia.org/wiki/Fair_Game_(Scientology) <-- get educated! I am not speaking for my employer, although they do rent some of my opinions. -- http://mail.python.org/mailman/listinfo/python-list