Где должна быть объявлена ​​библиотека #defines, если библиотека использует их? - PullRequest
1 голос
/ 28 апреля 2011

Это может показаться довольно глупым вопросом, но у меня есть файл заголовка для библиотеки, которую я пишу, в которой я объявляю некоторые строковые константы:

#define CONST1 "Hello, World!"
#define CONST2 "Foo Bar"
// etc

Источник библиотеки использует эти константы, поэтому мне нужно включить файл заголовка в источник:

#include <header.h>
void func() {
    printf("%s\n", CONST1);
}

В результате конечному пользователю не требуется включать файл заголовка в любой источник, который он пишет с использованием библиотеки. Это лучшая практика или есть альтернатива?

1 Ответ

3 голосов
/ 28 апреля 2011

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

Я не понимаю, что вы имеете в виду под кодом пользователя не требуется включать ваш заголовок, хотя ... Поскольку это символы препроцессора, заголовок с определениями необходим, если символы представляют интерес для пользовательской программы.

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

...