2 ms·
This is very interesting! Do you have some code examples or deeper explanation of this by any chance ?
by bluecalm 12y ago
This is very interesting! Do you have some code examples or deeper explanation of this by any chance ?
- cwzwarich 12y agoWell, I'm not a C language lawyer myself, so I'm merely going off of what I have heard from people who are, but consider the following C function: bool f(int *restrict a, int *b, bool should_modify) { if (should_modify) { *a = b; } return a == b; } Does this function have defined behavior? It turns out that the C spec says that the aliasing restrictions imposed by `restrict` only apply if the memory object pointed to by the restricted pointer has an intervening modification in the scope of the `restrict`; otherwise, the pointers are allowed to alias. Therefore, this function does not have defined behavior for all inputs. If a and b point to valid memory objects and a != b, then the behavior of f is defined regardless of the value of should_modify. If a == b, then f only has defined behavior if should_modify is false. Yes, this is arguably insane, but it's also the spec.