The getc() function returns a 'int', not a 'char'. Compiling ainit on a machine where 'char' is unsigned results in these warnings: ainit.c: In function 'read_token': ainit.c:194: warning: comparison is always true due to limited range of data type ainit.c: In function 'parse_file': ainit.c:223: warning: comparison is always true due to limited range of data type ... because a char cannot hold the value '-1'.