It's a matter of doing what you need to do (in practical terms) rather than what the C standard strictly allows you to do.
Suppose you want to put a very short delay into your code. You might write something like this:
for (i = 0; i < 100000; i++)
It looks nice and simple; just repeatedly increment a variable and then throw it away. The trouble is that a sensible optimiser will spot that this code does exactly nothing and throw the whole thing away, leaving you with no delay. You could switch the optimiser off when you run the compiler, but you don't want to do that because it makes the rest of your program larger and less efficient.
If you stick rigidly to the standard, you are a bit stuck at this point. You could put this snippet in a file of its own and compile it separately with the optimiser off. That would be a more theoretically satisfying answer, but it comes with maintenance nightmares, the overhead of an extra function call, and so on.
The pragmatic answer, if your compiler supports such a thing, is to stick
/* code here */
around the code you want left alone.
(The real answer is to declare
volatile or better yet not to write delays with spin loops, but let's ignore that for the sake of example.)