C语言实现栈的push函数时出现maxsize相关报错该如何解决?
问题原因分析
- 核心错误来自
#define宏定义的语法误用:C语言的#define是预处理器的文本替换指令,末尾不需要加语句结束符;,你在定义maxsize时额外加了分号,预处理器会把分号也当做宏值的一部分进行替换。 - 替换后你的代码实际会变成以下非法语法:
- 数组定义
int s[maxsize];会被替换为int s[100;];,编译器识别到方括号内出现非法的分号,直接判定数组s定义失败,因此后续push函数中调用s会报undeclared错误。 - 判满条件
top == maxsize-1会被替换为top == 100;-1,语法完全不合法,触发括号不匹配的报错。
- 数组定义
修复方案
把代码中第三行的宏定义末尾的分号删除即可,修改后代码如下:
#include <stdio.h> #include <stdlib.h> #define maxsize 100 int top=-1, item; int s[maxsize]; void push() { if (top == maxsize-1) { printf("Stack overflow\n"); return; } top = top + 1; s[top] = item; }
内容的提问来源于stack exchange,提问作者AKSHAT KANT THAKUR
相关产品推荐
相关产品推荐

