Нет, переменные не всегда должны быть инициализированы литералами, хотя некоторые люди любят гарантировать, что переменные инициализируются в точке объявления (а некоторые фирмы настаивают на этом), чтобы избежать чтения неинициализированных переменных в плохо сформированном коде.
Как и для любого поведения во время выполнения: применяется правило как если бы .Ваш исходный код просто описывает то, что вы хотите, чтобы поведение было, а не машинный код, который будет сгенерирован.Ваши переменные, вероятно, не будут существовать в скомпилированном двоичном файле, который будет эквивалентен
int main()
{
printf("sum is %d", 10);
}
(Выражение int a = 5, b = a
четко определено, поскольку ,
является точкой последовательности, поэтому инициализируется a
в то время как его значение считывается для присвоения b
.)