强类型:以初始化的全局数据;
弱类型:未初始化的全局数据;
main.c
#include<stdio.h>
short x = 10;
short y = 10;
void func();
int main()
{
fun();
printf("x=%d\n,y=%d\n");
return 0;
}
test.c
int x ;
void func()
{
x = 20;
}
上边打印出的结果为x=20,y=0。为什么呢?
一个工程中有多个文件,编译时分开编译。test.c编译时x访问的是当前文件的x,把20写到x的内存上,4字节大小。
main.c中的x为强符号,test.c中的x为弱符号,选强符号。链接时选强符号的x,但是编译时已经定好4字节大小。把20写到x内存上时,小端模式0x14000000,main.c中x、y都为short类型,也就是x是1400 ,y是0000。所以打印出来x=20,y=0。