我正在处理一个项目,代码包含一个宏定义:
#define __USE_MISC
代码没有使用它,所以我认为它有其他目的。
答案 0 :(得分:9)
__ USE_MISC在/usr/include/features.h
中的条件:
#if defined _BSD_SOURCE || defined _SVID_SOURCE
# define __USE_MISC 1
#endif
__ USE_MISC - >定义BSD和System V Unix的常用内容。
所以看起来你的代码想要确保它在任何情况下都被定义,即使_BSD_SOURCE
和_SVID_SOURCE
都没有定义(因为glibc 2.20,定义_DEFAULT_SOURCE
启用{{1 }})。
有关详细信息,请参阅feature test macros。
答案 1 :(得分:3)
__USE_MISC
是实现的标头如何处理“功能测试宏”的内部细节,它指导编译器应该为构建提供哪些标准函数集。如Thiruvalluvar's answer所示,如果您的构建需要_BSD_SOURCE
或_SVID_SOURCE
配置,则库头设置(供内部使用)。
您的代码/构建不应直接处理该宏;相反,它应该使用记录的功能测试宏。 glibc的文档可以在这里找到:http://www.gnu.org/software/libc/manual/html_node/Feature-Test-Macros.html
答案 2 :(得分:0)
这可能意味着要切换一些条件代码。例如这样的代码:
#ifdef __USE_MISC
DoSomething();
#endif
会受到#define
的影响。如果您的代码不再引用__USE_MISC
,那么可能它是残留的。