Update
This commit is contained in:
parent
e73685d3e9
commit
216d43f700
3 changed files with 24 additions and 0 deletions
|
@ -10,6 +10,26 @@ Undefined, unspecified and implementation-defined behaviors are kinds of unpredi
|
|||
|
||||
**Data type sizes including int and char may not be the same on each platform**. Even though we almost take it for granted than char is 8 bits wide, in theory it can be wider. The int (and unsigned int) type width should reflect the architectures native integer type, so nowadays mostly it's mostly 32 or 64 bits. To deal with this we can use the standard library `limits.h` and `stdint.h` headers.
|
||||
|
||||
**Order of evaluation of operands/arguments is not specified**. I.e. in an expression or function call it is not defined which operands or arguments will be evaluated first, the order may be completely random and the order may differ even when evaluating the same expression at another time. This is demonstrated by the following code:
|
||||
|
||||
```
|
||||
#include <stdio.h>
|
||||
|
||||
int x = 0;
|
||||
|
||||
int a(void)
|
||||
{
|
||||
x += 1;
|
||||
return x;
|
||||
}
|
||||
|
||||
int main(void)
|
||||
{
|
||||
printf("%d %d\n",x,a()); // may print 0 1 or 1 1
|
||||
return 0;
|
||||
}
|
||||
```
|
||||
|
||||
**Char data type signedness is not defined**. The signedness can be explicitly "forced" by specifying `signed char` or `unsigned char`.
|
||||
|
||||
**Bit shifts by type width or more are undefined.** Also bit shifts by negative values are undefined. So e.g. `x >> 8` is undefined if width of the data type of `x` is 8 bits.
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue