有关结构体对象的赋值,该怎么解决

有关结构体对象的赋值
struct Student
{
 int s;
}a;
这里声明a为全局;
为什么不可以在函数体外边
对a的成员进行赋值?

viod fun(){a.s=0;}
却可以?
这问题困惑我好久了,自始至终都没找到答案;
谁解释一下啊;

------解决方案--------------------
tricky question, but interesting.
原因在于语法限制,c++11 7.3.1 陈述 namespace (注意 global namespace 也是 namespace 的一种) 定义的语法,其中对于 namespace body 的语法定义为
C/C++ code

namespace-body:
   declaration-seq[opt]

------解决方案--------------------
如c,假设没命名空间.
那么 全局域中只允许初始化.
并且,不保证初始化的顺序.