Если оценка выражения вызывает поведение undefined в C, и выражение всегда оценивается, когда программа выполняется (например, если она появляется в начале main
), соответствует ли она, если реализация отвергает это во время компиляции? Есть ли разница в C между компиляцией/переводом программы и ее выполнением?
Я знаю, что существуют интерпретаторы для C. Как они обрабатываются стандартом C относительно этой разницы?
Пример (чтение неинициализированных локальных)
int main() { int i; return i; }
При запуске на любой стадии выполнения (даже до main
) программа может сделать что-то смешное. Но может ли что-то смешное происходить и тогда, когда мы даже не пытались его запустить? Может ли это вызвать переполнение буфера в самом компиляторе?