首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

关于函数的宣言与实现

2012-08-08 
关于函数的声明与实现正在自学C语言,菜鸟,希望大家能帮助一下。这个是谭浩强的c程序设计里面的一个练习题、

关于函数的声明与实现
正在自学C语言,菜鸟,希望大家能帮助一下。

这个是谭浩强的c程序设计里面的一个练习题、我按原代码输入后编译正确、但是连接出错。
#include"stdio.h"
void main()
{  
  void input(int *);
void max_min_value(int *);
void output(int *);
int number[10];
input(number);
max_min_value(number);
output(number);
}
void input(int number[])
{
int i;
printf("input 10 numbers:");
for(i=0;i<10;i++)
scanf("%d",&number[i]);
}
void max_min_value(int number[])
{
int *max,*min,*p,temp;
max=min=number;
for(p=number+1;p<number+10;p++)
if(*p>*max) max=p;
else if(*p<*min) min=p;
temp=number[0];number[0]=*min;*min=temp;
temp=number[9];number[9]=*max;*max=temp;
}
void output(int number[])
{
int *p;
printf("Now,they are: ");
for(p=number;p<number+10;p++)
printf("%d ",*p);
printf("\n");
}


错误信息:
--------------------Configuration: 103 - Win32 Debug--------------------
Linking...
103.obj : error LNK2001: unresolved external symbol "void __cdecl output(int *)" (?output@@YAXPAH@Z)
103.obj : error LNK2001: unresolved external symbol "void __cdecl max_min_value(int *)" (?max_min_value@@YAXPAH@Z)
103.obj : error LNK2001: unresolved external symbol "void __cdecl input(int *)" (?input@@YAXPAH@Z)
Debug/103.exe : fatal error LNK1120: 3 unresolved externals
Error executing link.exe.

103.exe - 4 error(s), 0 warning(s)


按照网上的方法将
void input(int *);
void max_min_value(int *);
void output(int *);
这三个函数声明放到void main()前面,程序就编译连接正常了、请问是怎么回事?网上说的是函数声明了却没有实现,哪位大侠能解释一下吗?如果将(int *)换成(int [])就不需要放到void main()前面,程序也是编译连接正常。这是怎么回事呢?声明的时候(int *),使用的时候是(int number[]),这个参数是怎么传递的?

还有就是函数调用的时候形参是(int number[]),如果去掉[]又不对了、可是书里面是没有[]的。那么有什么方法或者说怎么样可以省略[]。当然,直接将形参(int number[])换成(int *p)除外。
万分感谢。

[解决办法]
如果函数的定义直接写到了main前面,那就不需要main里面声明了,想下面这样

C/C++ code
#include"stdio.h"void input(int number[]){  int i;  printf("input 10 numbers:");  for(i=0;i<10;i++)  scanf("%d",&number[i]);}void max_min_value(int number[]){  int *max,*min,*p,temp;  max=min=number;  for(p=number+1;p<number+10;p++)  if(*p>*max) max=p;  else if(*p<*min) min=p;  temp=number[0];number[0]=*min;*min=temp;  temp=number[9];number[9]=*max;*max=temp;}void output(int number[]){  int *p;  printf("Now,they are: ");  for(p=number;p<number+10;p++)  printf("%d ",*p);  printf("\n");}void main(){     int number[10];  input(number);  max_min_value(number);  output(number);}
[解决办法]
不懂,看楼下
不过要吧#include"stdio.h"改为#include<stdio.h>比较好
包含标准头库文件时用<>,包含自己写的头文件时用""

谭浩强的书有许多不规范的地方
[解决办法]
谭浩强的书非常糟糕,建议看看《C Prime Plus》,以免基础就打歪了,呵呵!
[解决办法]
探讨

谭浩强的书非常糟糕,建议看看《C Prime Plus》,以免基础就打歪了,呵呵!

[解决办法]
C/C++ code
// myfun.h#ifndef MYFUN_H_INCLUDED#define MYFUN_H_INCLUDED#include <stdio.h>void input(int*);          // 输入void max_min_value(int*);  // 最大最小值void output(int*);         // 输出#endif // MYFUN_H_INCLUDED/********************************************/// main.cpp#include <stdio.h>#include "myfun.h"int main(){    int number[10];    input(number);    max_min_value(number);    output(number);    return 0;}/********************************************/// myfun.cpp#include "myfun.h"void input(int number[]){    int i;    printf("input 10 numbers:");    for (i = 0; i < 10; i++)        scanf("%d", &number[i]);}void max_min_value(int number[]){    int* max, *min, *p, temp;    max = min = number;    for (p = number + 1; p < number + 10; p++)        if (*p > *max) max = p;        else if (*p < *min) min = p;    temp = number[0]; number[0] = *min; *min = temp;    temp = number[9]; number[9] = *max; *max = temp;}void output(int number[]){    int* p;    printf("Now,they are: ");    for (p = number; p < number + 10; p++)        printf("%d ", *p);    printf("\n");} 


[解决办法]
根据你的错误信息
103.obj : error LNK2001: unresolved external symbol "void __cdecl output(int *)" (?output@@YAXPAH@Z)
我们可以看出,函数声明时,是按照c++的规则生成的标识符。如果你的文件名是.c的话,定义的函数的标识符应该是类似_output这样的C语言风格的标识符。这个错误初步判断是由于声明和定义的标识符不一样造成的。为什么会不一样呢?在下经验有限,不能判断了。
[解决办法]
果断换书,以前看过老谭的书,后来换国外的书,相比较而言,老谭的书就不说了。
推荐C primer plus 、 C 和指针

热点排行