为什么这个代码vs在main函数结束的右大括号 }会报错,在dev-c++不会报错

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
#define MAX 10000
//头结点插入
void add_to_head(int x, int l[], int r[], int idx, int date[], int head) {
date[idx] = x;
l[idx] = head;
r[idx] = r[head];
l[r[head]] = idx;
r[head] = idx;
}
//在k位置的后面插入一个数x
void add_to_r(int k, int x, int idx, int l[], int r[], int date[]) {
date[idx] = x;
l[idx] = k;
r[idx] = r[k];
l[r[k]] = idx;
r[k] = idx;
}
//在k的左边插入一个数x
void add_to_l(int k, int x, int date[], int l[], int r[], int idx) {
date[idx] = x;
r[idx] = k;
l[idx] = l[k];
r[l[k]] = idx;
l[k] = idx;
}
//删除k位置后面的数
void remove(int k, int l[], int r[]) {
r[k] = r[r[k]];
l[r[k]] = k;
}
void push(int l[], int r[], int date[], int head) {
head = r[head];
for (int i = head; i != 1; i = r[i]) {
//printf("%d ",i);
printf("%d ", date[i]);
}
}
int main() {
int l[MAX], r[MAX], date[MAX];
int head, idx, last;
head = 0; last = 1; idx = 2;
l[1] = 0; r[0] = 1;
int m;
scanf("%d", &m);
for (int i = 0; i < m; ++i) {
char op[2];
scanf(" %s", &op);
if (strcmp(op, "L") == 0) {
int x;
scanf("%d", &x);
add_to_head(x, l, r, idx, date, head);
idx++;
}
else if (strcmp(op, "R") == 0) {
int x;
scanf("%d", &x);
add_to_r(l[1], x, idx, l, r, date);
idx++;
}
else if (strcmp(op, "IL") == 0) {
int k, x;
scanf("%d %d", &k, &x);
add_to_l(k + 1, x, date, l, r, idx);
idx++;
}
else if (strcmp(op, "IR") == 0) {
int k, x;
scanf("%d %d", &k, &x);
add_to_r(k + 1, x, idx, l, r, date);
idx++;
}
else if (strcmp(op, "D") == 0) {
int k;
scanf("%d", &k);
remove(k + 1, l, r);
}
}
push(l, r, date, head);
return 0;
}