A ti no te da error, te da un warning ya que la funcion main(), que existe en todo programa completo en C está declarada como:
int main()
y esa es su forma estandar, así que al usarla como
void main()
te da un aviso (o warning), que quiere decir que el programa compila y no tiene errores de sintaxis, pero que a la hora de funcionar puede dar problemas. En este caso no tienes ningun problema y te debería generar la salida y la prodrías ejecutar, pero en otros es importante prestar atencion. No obstante, aunque te de el warning tu programa está compilado y puedes ejecutarlo.
Para quitar el warning cambia "void main()" por "int main()" y despues del "getch();" pon "return 0";
Con respecto a la 2ª pregunta... no, no es lo mismo pero si que lo es. El código estándar, es ANSI C, pero windows incluye otras bibliotecas como la conio.h o la dos.h o la windows.h que te permiten usar fuunciones adicionales.
Un saludo.