发生错误说明未识别的功能“推”,“弹出”和“显示”,我应该添加什么来修复它?

时间:2010-04-14 16:28:41

标签: c

#include<stdio.h>

#include<iostream.h>
#include<conio.h>
#include<stdlib.h>(TOP)
#include<fstream.h>

#define MAX 5

int top = -1;
int stack_arr[MAX];

main()
{
int choice;
while(1)
{
printf("1.Push\n");
printf("2.Pop\n");
printf("3.Display\n");
printf("4.Quit\n");
printf("Enter your choice : ");
scanf("%d",&choice);
switch(choice)
{
case 1 :
push();
break;
case 2:
pop();
break;
case 3:
display();
break;
case 4:
exit(1);
default:
printf("Wrong choice\n");
}/*End of switch*/
}/*End of while*/
}/*End of main()*/

push()
{
int pushed_item;
if(top == (MAX-1))
printf("Stack Overflow\n");
else
{
printf("Enter the item to be pushed in stack : ");
scanf("%d",&pushed_item);
top=top+1;
stack_arr[top] = pushed_item;
}
}/*End of push()*/

pop()
{
if(top == -1)
printf("Stack Underflow\n");
else
{
printf("Popped element is : %d\n",stack_arr[top]);
top=top-1;
}
}/*End of pop()*/

display()
{
int i;
if(top == -1)
printf("Stack is empty\n");
else
{
printf("Stack elements :\n");
for(i = top; i >=0; i--)
printf("%d\n", stack_arr[i] );
}
}/*End of display()*/

3 个答案:

答案 0 :(得分:2)

你应该在main:

之前转发声明这些函数
void push();
void pop();
void display();

或将实际声明移到main之上。

答案 1 :(得分:0)

在主

之前添加void push();

答案 2 :(得分:0)

如果您告诉我们您正在使用的编译器以及它给您的完全错误消息,那么真的会有所帮助。如果你稍微格式化你的代码也会有所帮助(虽然这个特定的代码片段很小而且很容易阅读)。

所以,这里有几件事情。首先,如果您没有显式地键入函数定义,则假定该函数返回int(即函数隐式地键入int)。因此,mainpushpopdisplay都被假定为返回int。这是一种非常古老和皱眉的风格,从C99标准开始就禁止使用IINM。由于pushpopdisplay不会向调用者返回值,因此应明确键入voidmain应明确键入int(在底部进一步讨论)。

其次,如果编译器在看到函数调用之前没有看到函数声明或定义,那么它将假定函数返回int。如果稍后使用不同的返回类型定义函数,则可能导致类型不匹配错误,如:

int main(void)
{
  ...
  foo();
  ...
}

void foo(void) { ... }

当编译器在foo()中看到对main()的调用时,它会假定foo()将返回int,但后来的定义与该假设相矛盾,因此它发布诊断。

这里的教训是,在调用之前至少应该声明你的函数,如下所示:

int main(void)
{
  void push();
  void pop();
  void display();
  ...
  push();
  ...
  pop();
  ...
  display();
  ...
}

void push(void) { ... }
void pop(void) { ... }
void display(void) { ... }

并确保声明定义匹配。就个人而言,我遵循“使用前定义”规则,如下:

void push(void) { ... }
void pop(void) { ... }
void display(void) { ... }

int main(void)
{
  ...
  push();
  ...
  pop();
  ...
  display();
}

这样您就不必担心保持声明和定义同步了。

关于main 的定义:C标准正好为main定义了两个接口:

int main(void); 
int main(int argc, char *argv[]); 

单个实现可以main定义其他接口;几个像这样添加第三个参数:

int main(int argc, char *argv[], char *env[]);

您对main 的定义必须符合标准中指定的两种形式之一,或者特定编译器的文档中指定的形式之一,或者程序将是未定义的(这可能意味着任何事情,从预期运行,立即崩溃,或运行到完成,但系统处于不良状态,或完全不同的东西)。有几位作者坚持认为,如果你不需要来自main()的返回值,你可以输入void,但只有当编译器文档明确地表示时才会这样做它支持void main()