顺序栈出栈为什么返回不正常值?

对于顺序栈,基本的初始化、入栈出栈代码如下,但执行结果为不正常值,小小问题求解答。

#include<stdio.h>
#include<stdlib.h>
#define Maxsize 50
typedef int ElemType;
typedef struct
{
    ElemType data[Maxsize];
    int top;
}SqStack;
void InitStack(SqStack& S)    //初始化栈
{
    S.top = -1;//使栈为空
}
bool StackEmpty(SqStack S)    //判断栈是否为空
{
    if (S.top == -1)
    {
        return true;
    }
    else
    {
        return false;
    }
}
bool Push(SqStack &S, ElemType x)//将元素x入栈,并返回是否成功(防止栈满的情况)。
{
    if (S.top == Maxsize - 1)    //判断是否栈满?满了则入栈失败
    {
        return false;
    }
    S.data[++S.top] == x;    
    return true;
}
bool GetTop(SqStack S, ElemType &m)    //获取栈顶元素。
{
    if (StackEmpty(S))
    {
        return false;    //如果栈为空,则无栈顶元素
    }
    m = S.data[S.top];    //取栈顶元素
    return true;
}
bool Pop(SqStack S, ElemType& m)    //弹出栈顶元素
{
    if (StackEmpty(S))
    {
        return false;    //如果栈为空,则无栈顶元素
    }
    m = S.data[S.top--];    
    return true;
}
int main()
{
    SqStack S;
    InitStack(S);    //初始化栈
    Push(S, 1);        //元素入栈
    Push(S, 2);
    Push(S, 3);
    bool flag;
    flag = StackEmpty(S);
    if (flag == true)
    {
        printf("栈是空的!\n");
    }
    ElemType m;
    flag = GetTop(S, m);
    if (flag == true)
    {
        printf("栈顶元素为:%d\n", m);
    }
    flag = Pop(S, m);
    if (flag)
    {
        printf("弹出的元素为:%d\n", m);
    }
    return 0;
}

运行结果如下:

img

入栈里面 S.data[++S.top] == x; 多了一个=