Должны ли мои заголовочные файлы компилироваться самостоятельно? - PullRequest
1 голос
/ 27 февраля 2020

Коллега недавно заявил, что заголовочные файлы всегда должны компилироваться самостоятельно (например, вызов g++ someHeader.hpp должен привести к someHeader.hpp.gch без сбоев).

Является ли это утверждение "верным"?

Является ли хорошей / распространенной практикой проверка того, могут ли ваши заголовки компилироваться самостоятельно?

Если да, в чем преимущество такого теста?

Мне кажется, это нелогично, так как заголовки включены препроцессором в модуль компиляции и должны компилироваться только в контекст этой единицы.

1 Ответ

3 голосов
/ 27 февраля 2020

Это хорошая / распространенная практика, чтобы проверить, способны ли ваши заголовки компилироваться самостоятельно?

Да. Практика хорошая и, насколько я знаю, обычная.

Если да, в чем преимущество

Заголовок, который не работает сам по себе, обязательно должен полагаться на контекст, где он будет включен. Если заголовок работает только тогда, когда он включен в определенный контекст, это fr agile. Хрупкость - это запах кода.

... заголовки включены препроцессором в модуль компиляции и должны компилироваться только в контексте этого модуля.

... А также все остальные единицы, в которые включен заголовок. Включая те единицы, которые еще не были написаны. И он также должен продолжать работать при внесении изменений в эти единицы.

Заголовок, который работает только в одной единице перевода в один момент времени, не очень полезен в долгосрочной перспективе.

...