Это так называемые прототипы функций.Они сообщают компилятору, что функция существует, но не где (пока).Компилятор использует это, чтобы убедиться, что вы вызываете функцию правильно, но это все.
Когда компилятор завершит работу, будет вызван компоновщик.Здесь происходит волшебство.Компоновщик определяет, какая библиотека имеет фактическую реализацию функции.В этом случае он, вероятно, будет находиться в стандартной библиотеке (называемой в некоторых системах libc), которая автоматически загружается. Линкер выполняет свою функцию, и ваши вызовы этой функции затем обрабатываются библиотекой.
Если прототип существует, но реализация не может быть найдена, вы получите ошибку компоновщика (что-то вроде «неопределенного символа»).Если прототип отсутствует, код скомпилируется, но вы, вероятно, получите предупреждение об этом (спасибо Джиму Балтеру за информацию об этом).