| Date: Tue, 05 Jun 2007 18:38:27 +0100
| From: Pádraig Brady <P at draigBrady.com>
|
| I was wondering under what circumstances
| (compilers/CPUs) that the following program
| generates an integer overflow exception.
| I think none, but I'm reviewing code
| that assumes otherwise.
| I understand MIPS generates an exception
| for signed arithmetic only.
|
| #include <stdio.h>
| int main(void) {
| unsigned int i;
| for(;;i++;) {
| if (i==0) {
| printf("wrap\n");
| fflush(stdout);
| }
| }
| }
ignoring the failure to initialise ‘i‛ (and the
extra semicolon), that code must — not cannot,
but must not — ever generate an exception IF the
compiler in question is C99 (and, AFAICR, C89)
conformant.
reason? it's “unsigned”. and, by definition,
unsigned integer maths is computed modulo N,
for an appropriate N. (e.g., 2³²-1 for the
classic 32-bit two-complement integer.)
OTOH, if it were signed, than the behaviour on
overflow is not defined, and so an exception
would be Ok. but, like you, I cannot think of
any system where such an exception is the norm,
and am not certain I know of any system where
such an exception exists?
cheers!
-blf-
--
▶ ▶ I AM CURRENTLY LOOKING FOR A JOB! ◀ ◀ | Brian Foster
Experienced (>25 yrs) software engineer: | Montpellier, FRANCE
• Unix, Linux, embedded, design-for-test; | Stop E$$o (ExxonMobile)!
• Software/hardware co-design, debugging; | http:/www.stopesso.com
• Kernels, drivers, filesystems, &tc; Résumé (CV) & contact details:
• IDL, automated testing, process, &tc. http://www.blf.utvinternet.ie
Maintained by the ILUG website team. The aim of Linux.ie is to
support and help commercial and private users of Linux in Ireland. You can
display ILUG news in your own webpages, read backend
information to find out how. Networking services kindly provided by HEAnet, server kindly donated by
Dell. Linux is a trademark of Linus Torvalds,
used with permission. No penguins were harmed in the production or maintenance
of this highly praised website. Looking for the
Indian Linux Users' Group? Try here. If you've read all this and aren't a lawyer: you should be!