code blocks可以编译但是到Linux里的vim时无法编译成功是怎么回事?

图片说明
图片是Linux报错信息。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define MAXN 1000
void reverse(char* str)
{
    char* p = str + strlen(str)-1;
    char temp;
    while(str<p)
    {
        temp=*p;
        *p--=*str;
        *str++=temp;
    }
}

int main(int argc, char *argv[])
{
    int i;
    printf("File name is %s\n",argv[0]);
    printf("Totally input %d parameters.\n",argc-1);
    for(i=1; i<argc; i++)
    {
        reverse(argv[i]);//对字符串进行翻转
        printf("argv[%d] = %s\n",i, argv[i]);
    }

    return 0;
}

上面是我的代码 在code block编译成功 也在cmd中运行成功了 但是在linux里不行 求大神指教
这是我的题目要求:
请编写代码,实现输出当前程序文件名、参数的个数,并将输入的参数字符串反转输出。
例:编译好之后运行 ./a.out abcde 12345,则输出以下内容:
File name is a.out.
Totally input 2 parameters.
edcba
54321

windows和linux的文件格式不同,中间文件也不通用。
要删除.o文件.out文件.obj文件,等等这些文件,重新编译。
还有filename是什么,程序后缀应该是 .c