小灰狼lms 发表于 2014-4-22 08:56:56

关于同一workspace不同file内函数的调用

首先感谢大家点开来看我的这个问题,谢谢~O(∩_∩)O~~
这是学到函数这一章遇到的一个问题,在一个.c文件中引用另一个的函数时出现问题。问题如下:
新建一个win 32 console application,命名为fuction.再新建一个c++sourse file,命名为test02_1.输入代码:
/******************************
****** 值的传递(新版) *******
******************************
#include <stdio.h>
#include <conio.h>
void main()
{
int a, b, c;
int input();
int max(int x, int y);
printf("input a:");
a = input();
printf("input b:");
b = input();
c = max(a, b);
printf("a = %d, b = %d\n", a, b);
printf("max = %d\n", c);
getch();
}

int input()
{
int i, m;
m =scanf("%d", &i);
getchar();
while(m != 1)
{
printf("input error.please input again.\n");
printf("please input a number:");
m = scanf("%d", &i);
getchar();
}
return i;
}

int max(int x, int y)
{
if(x < y) x = y;
return x;
}

好,这样运行起来完全没问题。然后把这个test02_1.c注释掉,就是整个函数前后加上/********,再新建一个file,命名test03add.c,代码如下:
/******************************
****** add函数 ****************
******************************/
#include <stdio.h>
#include <conio.h>
void main()
{
float input();
float add(float x, float y);
float a, b, sum;
a = input();
b = input();
sum = add(a, b);
printf("sum = %f\n", sum);
}
float add(float x, float y)
{
x = x + y;
return x;
}

这样运行之后,输入2和3,输出却是
max = 3
但如果在test03add.c中再加入一个函数:
float input()
{
float i;
scanf("%f", &i);
return i;
}
则输出正常。这是为什么?谢谢大家~

仰望天上的光 发表于 2014-4-22 08:56:57

C语言同一工程内两个不同的函数,名字都叫做input,按照严格标准,C语言编译器在链接阶段必须报错。至于你的编译器为什么没有报错。。。这个智能解释为你的编译器在这个地方不符合C标准

小灰狼lms 发表于 2014-4-22 08:58:35

噢,开始的注释少打了一个反斜杠,不过这不是重点,大家别介意哈~

小灰狼lms 发表于 2014-4-22 16:03:25

仰望天上的光 发表于 2014-4-22 10:04 static/image/common/back.gif
C语言同一工程内两个不同的函数,名字都叫做input,按照严格标准,C语言编译器在链接阶段必须报错。至于你的 ...

用的是vc++6.0哦,第一个函数已经注释掉了,我不理解的是为什么还会运行的时候跳到那里去

小灰狼lms 发表于 2014-4-22 16:09:05

另外为什么跳到那里去之后不只是运行这个input()函数,连后面的max()函数也运行了:cry
页: [1]
查看完整版本: 关于同一workspace不同file内函数的调用