链接器解析多重定义的全局变量

//first.c
#include <stdio.h>
void f(void);

int x = 15213;
int y = 15212;



int main()
{
	f();
	printf("x = ox%x y = 0x%x\n", x, y);
	
	return 0;
}


//bar.c
double x;

void f()
{
	x = -0.0;
}

xxx@ubuntu-64bit-compile:~/share2/learning/csapp/project$ cc first.c bar4.c


/usr/bin/ld: Warning: alignment 4 of symbol `x' in /tmp/ccFBxcBU.o is smaller than 8 in /tmp/ccOvyDIy.o
xxx@ubuntu-64bit-compile:~/share2/learning/csapp/project$ ./a.out 

x = ox0 y = 0x80000000

因为double 类型是8个字节, 而int 类型是4个字节。因此, 负值的双精度浮点表示覆盖存储中 x 和 y的位置。因此就会产生那样的打印结果。


为此, 在项目中, 得到了一条经验教训: 不要忽视 编译警告。。。。

 这一点开发人员一直不注意。


你可能感兴趣的:(android,android,android,linux,linux,linux)