Первый оператор создает переменную инициализируется заданных значений, то есть, эти значения встроенной памяти и хранящихся непосредственно в программе исполняемый файл в том, что адрес переменной (для глобальных) или готов к копированию памяти (для переменных стека).
Вторая формулировка второго блока очень различна. Хотя он выглядит аналогичным, это выражение назначения. Это означает, что RHS оператора equals является выражением, которое оценивается (независимо от того, что находится в LHS = =), а затем передается оператору =. Без надлежащего контекста {...}
не имеет никакого значения.
В C99, вы можете сделать это:
struct_name_id = (struct struct_type_id){ value1, value2, value3 };
Теперь правая часть равенства оператора является допустимым выражением, так как есть правильный контекст для компилятора, чтобы узнать, что находится в {...}
.
В C++ 11, синтаксис:
struct_name_id = struct_type_id{ value1, value2, value3 };
Где я могу узнать больше об этом языке программирования C/C++? У него есть веб-страница? –