Language rules before machine observations
What this concept is
C code obeys an abstract language model. A machine trace shows what happened on one build; it does not by itself establish what every conforming implementation must do. Record the language version and target assumptions before interpreting output.
Why it matters here
The next module introduces pointers and object lifetimes. Treating every address as freely accessible memory makes invalid programs appear plausible. Bounds, lifetime and valid operations must be established before an experiment can support a conclusion.
Concrete example
On an eight-bit signed-char target in C11, signed char c = 127; c = c + 1; first computes 128 as int, then converts it back. The out-of-range conversion has an implementation-defined result or signal. This differs from overflowing an int at INT_MAX. On a wider signed-char target, 128 may be representable. State the assumption rather than memorizing a printed result.
Common confusion / misconception
C is not literally portable assembly. Optimizers rely on language rules; an invalid access is not justified because an adjacent address seems readable. Likewise, two matching executions do not prove portability.
How to use it
Write a three-column note: language guarantee, target assumption, observed result. Compile valid examples under the declared standard. For deliberately invalid examples, explain the violated rule and treat any diagnostic as a demonstration, not an expected numeric answer.
Check yourself
Why is signed overflow different from a narrowing conversion? Which observation would tell you CHAR_BIT on this host? Would that prove every host uses the same value?
Mini drill or application
Predict sizeof(char), CHAR_BIT and the printed limits from <limits.h>. Record the compiler version and actual output. Explain why a byte size of one does not by itself promise eight bits.
Read this only if stuck
The C Programming Language for types, plus C11 committee draft N1570, especially 6.3.1.3. The draft is a reference, not a cover-to-cover assignment. This lab explicitly uses C11.