Следует явно описывать все аргументы функций. Не надо опускать их, поскольку их тип - int.
Описания внешних функций и функций, которые появляются позднее в исходном файле должны все быть в одном месте в начале файла (где-нибудь до первого описания функции в этом файле), или должны размещаться в заголовочном файле. Не помещайте extern-описания внутри функций.
Зачастую, одна и та же локальная переменная (с именем вроде tem) используется для разных целей внутри одной функции. Лучше, однако, описывать отдельную локальную переменную для каждого конкретного использования и давать ей имя в соответствии с ее смыслом. Это не только увеличивает понимаемость программы, но так же улучшает оптимизации, выполняемые хорошими компиляторами. Вы можете также переместить описание каждой локальной переменной в наименьший блок, включающий все ее использования. Это также делает программу яснее.
Не следует использовать имена локальных переменных или параметров, которые затеняют (перекрывают) описания глобальных переменных.
Не нужно описывать несколько переменных в одном описании, разбитом на несколько строк. Например, вместо:
int foo, bar;
int foo, bar;
int foo; int bar;
if (foo) if (bar) win (); else lose ();
if (foo) { if (bar) win (); else lose (); }
if (foo) ... else if (bar) ...
if (foo) ... else { if (bar) ... }
if ((foo = (char *) malloc (sizeof *foo)) == 0) fatal ("virtual memory exhausted");
foo = (char *) malloc (sizeof *foo); if (foo == 0) fatal ("virtual memory exhausted");