【问题标题】:How to use Glibc feature test macros?如何使用 Glibc 功能测试宏?
【发布时间】:2016-10-25 11:37:13
【问题描述】:

如果可用,我愿意使用pthread_setname_np 函数。手册页中的代码:

   #define _GNU_SOURCE             /* See feature_test_macros(7) */
   #include <pthread.h>
   int pthread_setname_np(pthread_t thread, const char *name);
   int pthread_getname_np(pthread_t thread,
                          char *name, size_t len);

这样做是否安全(不包含,不定义):

#ifdef _GNU_SOURCE
    pthread_setname_np(pthread_self(), "mythread");
#endif

不需要包含,因为我使用的 C++ #include &lt;thread&gt; 似乎拉动了 pthreads_GNU_SOURCE 始终在 libstdc++ 中启用,如果它被禁用 - 代码仍将编译。

我错过了什么吗?

【问题讨论】:

  • 你读过feature_test_macros(7)吗?
  • @BasileStarynkevitch,是的。这是关于控制标准库提供的内容。我有兴趣根据构建的设置方式激活我的程序功能。
  • 似乎这个问题被标记为c,但实际问题讨论了c++。这些是不同的语言。请选择一个。
  • @user3629249,这是关于glibc的功能测试宏。我根本不会用cc++ 来标记它,但我认为C 程序员更熟悉glibc 和Linux(而且C 程序员通常更多)。

标签: c linux libc


【解决方案1】:

这样做是否安全(不包含,不定义):

是的。只要包含为pthread_setname_np 提供原型的&lt;pthread.h&gt;,它就是安全的。

不需要包含,因为我使用的 C++ #include 似乎会拉取 pthread。

libc++ 在下面使用 pthreads 库。所以,它适用于pthread.h。但这并不意味着如果您包含&lt;thread&gt;,则不需要pthread.h。如果libc++ 改变底层机制来实现线程怎么办?因此,通过 pthread.h 只是因为它恰好可以通过其他方式获得是不安全的。

【讨论】:

    猜你喜欢
    • 2017-08-30
    • 2019-03-15
    • 1970-01-01
    • 2017-08-17
    • 2018-06-23
    • 2011-04-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多