2012-04-19 2 views
3

Я работаю над проектом, и код содержит определение макроса:Что такое макрос __USE_MISC?

#define __USE_MISC 

Код не используется, так что я думаю, что это какая-то другая цель.

+0

Я нашел это в '' __USE_MISC Определить вещи, общие для BSD и System V Unix . Но я до сих пор не знаю, что именно. – Bruce

ответ

7

__USE_MISC определяется в /usr/include/features.h при условии:

#if defined _BSD_SOURCE || defined _SVID_SOURCE 
# define __USE_MISC  1 
#endif 

__USE_MISC -> Define вещи, общие для BSD и System V Unix.

Так выглядит ваш код хочет, чтобы гарантировать, что он определен в любом случае, даже если оба _BSD_SOURCE и _SVID_SOURCE не определены (С Glibc 2.20, определение _DEFAULT_SOURCE позволяет __USE_MISC).

Для получения дополнительной информации см. feature test macros.

+0

Кроме того, я предлагаю, чтобы OP выглядела так, чтобы убедиться, что среда сборки настроена правильно (и/или документирует требуемую конфигурацию), а не использует этот бэк-халк. –

0

Предполагается, что это означает, что для переключения какого-либо кода состояния. Например, такой код:

#ifdef __USE_MISC 
    DoSomething(); 
#endif 

будет зависеть от вашего #define. Если ваш код больше не ссылается на __USE_MISC, то предположительно это рудиментарно.

3

__USE_MISC - это внутренняя информация о том, как заголовки реализации обрабатывают «макросы проверки функций», которые направляют компилятор относительно того, какой набор стандартных функций должен быть доступен для сборки. Как указывает Thiruvalluvar's answer, он настроен (для внутреннего использования) заголовками библиотеки, если ваша сборка требует конфигурации _BSD_SOURCE или _SVID_SOURCE.

Ваш код/​​сборка не должен напрямую касаться этого макроса; вместо этого он должен использовать макросы с документализованными функциями. документы GLibC можно найти здесь: http://www.gnu.org/software/libc/manual/html_node/Feature-Test-Macros.html

+0

Я оказался в ситуации, когда мне нужно было «-ansi -D_DEFAULT_SOURCE = __ STRICT_ANSI__', потому что' -ansi' оставил члены 'struct in6_addr' undefined. '-D_DEFAULT_SOURCE = __ STRICT_ANSI__' заработал' __USE_MISC'. Также см. ['Struct in6_addr' не имеет члена с именем 's6_addr32' с -ansi] (http://stackoverflow.com/a/36222072/608639). Он не чувствует себя комфортно, потому что мне никогда не приходилось это делать. – jww

Смежные вопросы