2016-10-25 11 views
0

​​機能が利用可能であれば使用したいと思います。 manページからのコード:Glibc機能テストマクロの使用方法は?

#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 <thread>pthreadsを引くように見えるので、必要のない付属。 _GNU_SOURCEは常にlibstdc++で有効になり、無効になってもコードはコンパイルされます。

何か不足していますか?

+1

[feature_test_macros(7)](http://man7.org/linux/man-pages/man7/feature_test_macros.7.html)を読んだことがありますか? –

+0

@BasileStarynkevitch、はい。これは、標準ライブラリが提供するものを制御することです。ビルドの仕方によってプログラムの機能を有効にすることに興味があります。 – Velkan

+0

この質問は 'c 'とtag'dされているようですが、実際の質問では' C++ 'について議論しました。これらは異なる言語です。選択してください。 – user3629249

答えて

4

(いや、何の定義が含まれていない)ちょうどそのよう行うには、それが安全である:

はい。​​のプロトタイプを提供する<pthread.h>を含める限り、安全です。

私が使用しているC++ #includeがpthreadsを引き出しているようだから、インクルードは不要です。

libc++は、下のpthreadsライブラリを使用します。したがって、pthread.hと動作します。しかし、<thread>を含めると、pthread.hは不要です。 libc++がスレッドを実装する根本的なメカニズムを変更したらどうなるでしょうか?したがって、他の手段で利用できるようになったため、pthread.hを渡すことは安全ではありません。

関連する問題