などを避けるためのgccの警告Python C延長利用の場合Py_BEGIN_ALLOW_THREADS
-
23-09-2019 - |
質問
最も簡単な方法の操作は、吉Python Cの拡張子は、利用、提供されたマクロ:
my_awesome_C_function()
{
blah;
Py_BEGIN_ALLOW_THREADS
// do stuff that doesn't need the GIL
if (should_i_call_back) {
Py_BLOCK_THREADS
// do stuff that needs the GIL
Py_UNBLOCK_THREADS
}
Py_END_ALLOW_THREADS
return blah blah;
}
この作品は、せていただいてのGILのバルクのコードが再度抜群で小さなビットのコードが必要です。
問題は、私がコンパイルすgccを取得しま:
ext/engine.c:548: warning: '_save' might be used uninitialized in this function
でPy_BEGIN_ALLOW_THREADS定義するようになります:
#define Py_BEGIN_ALLOW_THREADS { \
PyThreadState *_save; \
_save = PyEval_SaveThread();
なので、三つの質問:
- で抑えることができる。gccの警告
- いうのはなぜgcc考え
_save
使う初期化されていないので配置の直後にその宣言 - なぜなら、マクロが定義されて宣言すると初期化の変数を一つ決めをしますか?
(最後の二さんも自分の好奇心).
いなので問題はないのマクロでいてくださると嬉しいですが、いと思います。
解決
- りを抑制することができる初期化されていない警告をWno-接頭辞です。
-Wall -Wno-uninitialized
除する場合にはこの警告は、単に初期化 _save
るnullポインタのないような機能の戻り値...この一行のコードおよびコメントは意味があいて:
PyThreadState *_save;
_save = 0; /* init as null pointer value */
_save = PyEval_SaveThread();
他のヒント
私の二つのセント:
- を抑えることができる個別の警告がでしょうが、すでに知っています。
- という が する初期化されていない:-)
- 理由はただそれだけ想像できますが互換性高齢Cコンパイラでコンパイル.
っ込 のソース, もんべい手がかりになると考えられます。
ネッド、あなたはこれらの 1 :
#pragma GCC diagnostic warning "-Wno-unitialized"
#pragma GCC diagnostic error "-Wno-uninitialized"
#pragma GCC diagnostic ignored "-Wno-uninialized"
または-Wuninitialized
を無視?文書によると、あなたは、任意のデータや機能が定義される前にこれをしなければなりません。多分それはあなただけで、そのファイルのための警告を無効にできるようになる?
所属していません StackOverflow