【发布时间】:2013-05-13 15:48:07
【问题描述】:
零.c:
int sq();
one.c:
int sq(int i) { return i*i; }
两个.c:
int sq(int i, int j);
main.c:
int main() {
printf("%d\n",sq());
printf("%d\n",sq(2));
printf("%d\n",sq(2,3));
}
然后我分别编译每个文件和gcc zero.o one.o two.o main.o -o main
./main给了
1
4
4
我对这将如何成功运作感到有些困惑。当我打电话给sq() 或sq(2) 或sq(2,3) 时会发生什么
【问题讨论】:
-
two.c 的实现是什么?
-
我认为您的链接器很困惑。我不认为你实际上可以有 3 个方法命名相同的东西,即使它们确实有不同的参数。我认为您的目标代码将调用其中一个函数,而不是全部 3 个。我认为函数 1 被调用,然后其余的是函数 2 调用。
-
如果你这样做会有未定义的结果:stackoverflow.com/questions/3098380/…
-
您使用的是哪个编译器和版本?
-
您只有一个 sq() 的实际实现,因此每次调用该函数时都会使用它。如果您使用错误数量的参数调用它,您将有未定义的行为。