【发布时间】:2020-12-20 09:39:39
【问题描述】:
我有一个奇怪的问题。 这是两个源代码。
/*---main.c---*/
#include <stdio.h>
int d=100;
int x=200;
void p1(void);
int main() {
p1();
printf("d=%d,x=%d\n",d,x);
return 0;
}
/*---p1.c---*/
double d;
void p1() {
d=1.0;
}
我编译代码和链接。 我收到警告:
/usr/bin/ld: Warning: alignment 4 of symbol `d' in /tmp/ccuZEbnu.o is smaller than 8 in /tmp/ccrTyML7.o
我执行程序并得到结果d=0,x=1072693248,为什么不是d=100,x=200?
这太奇怪了,我无法理解。我尝试打印d和x的地址,发现两个源代码中变量d的地址完全一样。我认为不同源代码中的两个变量d应该是不同的,因为它没有extern。
我是新手。对不起我的英语不好。提前感谢您的帮助。
【问题讨论】:
-
C 和 C++ 是非常不同的语言。请不要同时标记两者,除非您的问题专门针对它们的差异。
-
函数中不存在返回。您还需要定义函数的输出数据类型 ex) int user_function () { return int type output}
-
您可能想了解
static关键字的用途。 -
@Gerhardh 我知道了,变量默认是
extern。 -
@guapi,你可以发布一个答案。