【例6.1】下面程序没有找出错误,但编译就出错,是何问题?
#include <stdio.h>
int main
(
)
{
char st[18]
;
printf
("
输入:"
);
gets
(st
);
back
(st
);
return 0
;
}
void back
(char st
)
{
printf
(st
);
printf
("\n"
);
return
;
}
当编译到主程序的
back (st );
语句时,编译系统不清楚back的含义,所以报错。
如果函数back在主函数之前定义,编译系统就知道back是函数调用,能顺利编译。如果不想把back函数定义在主函数之前,就必须在主函数前面先声明back函数,声明的方式就是给出这个函数的原型,又称为原型声明。一般把它们放在包含语句之后,主函数之前。声明中可以有变量名,例如:
void back (char st[ ] );
也可以只给出变量的数据类型,例如:
void back (char [ ] );
【例6.2】下面程序编译出错,是何问题?
#include <stdio.h>
int sum
(int
,int
,int
);
int main
(
)
{
printf
("Sum=%d\n"
,sum
(1
,3
,5
));
return 0
;
}
int sum
(a
,b
,c
)
{
int a
,b
,c
;
return a+b+c
;
}
【解答】编译给出如下错误信息。
error C2082 : redefinition of formal parameter 'a' error C2082 : redefinition of formal parameter 'b' error C2082 : redefinition of formal parameter 'c'
这是函数sum定义错误。老的定义方式是在参数列表中给出变量名,单变量的声明不是在函数中,而是在“{”之前,声明的方式跟变量的声明一样。例如:
int sum
(a
,b
,c
)
int a
, b c
;
{ return a+b+c
;}
或者
int sum
(a
,b
,c
)
int a
; int b
; int c
;
{ return a+b+c
;}
也可以
int sum
(a
,b
,c
)
int a
;
int b
;
int c
;
{ return a+b+c
;}
后一种方式方便对参数进行注释。目前Windows的一些程序常采用这种方式。
新的方式是在参数列表中给出数据类型,在函数里直接使用。例如:
int sum
(int a
, int b
, int c
)
{ return a+b+c
;}
