Cygwin で gcc を使用して、このPython ドキュメント記事の最初の例をコンパイルしてみました。私のコード:
#include <Python.h>
static PyObject *
spam_system(PyObject *self, PyObject *args)
{
const char *command;
int sts;
if (!PyArg_ParseTuple(args, "s", &command))
return NULL;
sts = system(command);
return PyLong_FromLong(sts);
}
ただし、コンパイルしようとすると、gcc で次のエラーが表示されます。
In file included from /usr/include/Python.h:77:0,
from test.c:1:
/usr/include/longobject.h:77:26: error: expected '=', ',', ';', 'asm' or '__attr
ibute__' before 'PyLong_AsLongLong'
/usr/include/longobject.h:78:35: error: expected '=', ',', ';', 'asm' or '__attr
ibute__' before 'PyLong_AsUnsignedLongLong'
/usr/include/longobject.h:79:35: error: expected '=', ',', ';', 'asm' or '__attr
ibute__' before 'PyLong_AsUnsignedLongLongMask'
/usr/include/longobject.h:80:26: error: expected '=', ',', ';', 'asm' or '__attr
ibute__' before 'PyLong_AsLongLongAndOverflow'
何か案は?
アップデート:
どうやらこれは、Python.h の前に windows.h をインクルードしない限り定義されていない __int64 に展開される PY_LONG_LONG が原因であると思われます。ただし、なぜそれが必要なのかわかりません。また、リンクされた記事の次のルールに違反しています。すべての標準ヘッダーが含まれます。」
windows.h をインクルードする必要を回避する方法はありますか?