Должны ли стандарты быть указаны в исходном коде или в CPPFLAGS? - PullRequest
6 голосов
/ 13 января 2011

Лучше ли #define _BSD_SOURCE или установить CPPFLAGS = -D_BSD_SOURCE?

Мне кажется, что если часть исходного кода опирается на определенный стандарт, то лучше четко изложить егосам код с #define.Тем не менее, многие комментарии указывают на то, что указание стандарта в строке компиляции более уместно.Каковы преимущества исключения стандарта из исходного кода и указания его только во время компиляции?

1 Ответ

6 голосов
/ 13 января 2011

Если вы укажете определения в вашем источнике, существует риск того, что один и тот же файл заголовка может быть включен в несколько исходных файлов (единиц перевода), но с разными определениями препроцессора, что может привести к нарушению правила одного определения, которое часто является болью для отладки.

Указав определения для всего проекта, а не в отдельных исходных файлах, вероятность такого нарушения правила одного определения минимизируется.

Кроме того, если возникает необходимость добавить новое определение, вы изменяете только один make-файл, а не все исходные файлы.

...