Ответ в том, что это неявное объявление. Если компилятор не видит прототип для функции, он предполагает, что он был объявлен как:
int system();
Если вы включите уровень предупреждения на вашем компиляторе, вы, вероятно, увидите, что это вызывает предупреждение. Неявные объявления, как правило, нежелательны, но в этом случае именно поэтому это работает без каких-либо ошибок.