C语言中在结构体声明的时候赋值出现有关问题

C语言中在结构体声明的时候赋值出现问题?
(在linux下)这样一个简单的程序:
#include<stdio.h>
typedef struct su{
int a=1; (1)
int b=1; (2)
}Su;
int main(){
Su su;
printf("a:%d",su.a);
printf("b:%d",su.b);
return 0;
}

这样编译的话会有这样的问题:
expected ':',',',';','}' or '__attribute__' before '=' token (指的是第一句)
'Su' has no member named 'a'
'Su' has no member named 'b'

如果把“=1”去掉就对了,我不知道为什么?能否请老师从深层次帮我讲解一下!(PS:希望能从这里学点基础知识,如果说这是作者在设计语言的时候就固定死的语法,那就给我点信号,然后当我没问,哈哈)

------解决方案--------------------
结构体声明怎么能赋值呢?只有定义了结构体后对结构体成员变量逐一赋值。
例如你的例子赋值要这样:
typedef ...是结构体声明不不能赋值

定义结构体:
SU su;
su.a = 1;
su.b = 1;
这样逐一赋值,引用的时候也要这样逐一引用,不能一次性引用。
例如:
int a = su.a; //此时 a就等于1
int b = su.b; //b就等于1
------解决方案--------------------
在结构体内,既定义又赋值在标准里是不允许的。所以错误了。在C++中可以使用构造函数进行对其赋值。如果你的程序需要对其进行赋值,那么请定义后自己手工赋值吧。
SU su;
su.a = 1;
su.b = 1;
------解决方案--------------------
在c中,全局变量,静态变量的所有成员,在编译器就可以确定其地址,所有所有成员会自动初始化为0,而局部变量是分配在栈中的,在运行时才能初始化。c标准中,并不支持这样的语法,假定编译要支持的话,在每次使用变量前,不管需要不需要,编译器都要将编译出几条赋值指令来,势必降低程序的速度,没有意义。

------解决方案--------------------
++
探讨
在结构体内,既定义又赋值在标准里是不允许的。所以错误了。在C++中可以使用构造函数进行对其赋值。如果你的程序需要对其进行赋值,那么请定义后自己手工赋值吧。
SU su;
su.a = 1;
su.b = 1;