Единственное, что «неправильно», это то, что вы полагаетесь на специфичный для компилятора флаг командной строки, чтобы сделать файлы компилируемыми. Вы должны будете сделать что-то другое, если не используете GCC. Большинство компиляторов, вероятно, предоставляют эквивалентную функцию, но лучше писать переносимый исходный код, чем без необходимости полагаться на функции вашей конкретной среды сборки.
Другим программистам не нужно ломать голову над вашими Make-файлами (или файлами Ant, или рабочими пространствами Eclipse, или чем-то еще), чтобы выяснить, как все работает.
Это также может вызвать проблемы у пользователей IDE. Если IDE не знает, какие файлы включены, возможно, она не сможет обеспечить автоматическое завершение, просмотр исходного кода, рефакторинг и другие подобные функции.
(FWIW, я думаю, что было бы неплохо иметь один заголовочный файл, включающий все заголовки стандартной библиотеки, которые вы используете в своем проекте. Это облегчает прекомпиляцию, облегчает перенос на нестандартный окружения, а также помогает справиться с теми проблемами, которые иногда возникают, когда заголовки включаются в разные порядки в разных исходных файлах. Но этот заголовочный файл должен быть явно включенным в каждый исходный файл; не должно быть никакой магии.)