正確には void main(void) は規格違反ではない。
int main(int, char**) と int main(void) と
それらと等価な定義を必ずサポートしなくてはならないだけであって、
それ以外の定義をコンパイラが独自にサポートしていても良いことになっている(処理系定義)。
もしそのコンパイラが void main(void) を独自にサポートしていると明言しているのであれば、
void main(void) が使えるからといってそのコンパイラが規格を違反しているわけではない。
移植性は無いがな。