O gcc usa a extensão do arquivo (sufixo) para determinar o tipo - você nomeou seu arquivo com um sufixo .c? Se não, tente renomeá-lo - por exemplo, se eu tiver um arquivo chamado 'testc'
$ cat testc
#include<stdio.h>
int main()
{
printf("THIS is a C-file\n");
return 0;
}
Então
$ gcc -o test testc
testc: file not recognized: File format not recognized
collect2: ld returned 1 exit status
Mas depois de renomear para um arquivo .c adequado
$ mv testc test.c
$ gcc -o test test.c
$
$ ./test
THIS is a C-file