Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 声明没有初始大小的数组_C - Fatal编程技术网

C 声明没有初始大小的数组

C 声明没有初始大小的数组,c,C,我正在尝试使用VisualStudio2008在WindowsVista x64上编译OpenSSL(pyOpenSSL)的Python绑定。当我运行python setup.py build\u ext-ic:\OpenSSL\include时,它会死掉,并出现以下错误: building 'OpenSSL.crypto' extension C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\BIN\amd64\cl.exe /c /n

我正在尝试使用VisualStudio2008在WindowsVista x64上编译OpenSSL(pyOpenSSL)的Python绑定。当我运行
python setup.py build\u ext-ic:\OpenSSL\include
时,它会死掉,并出现以下错误:

building 'OpenSSL.crypto' extension
C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\BIN\amd64\cl.exe /c /nologo /Ox /MD /W3 /GS- /DNDEBUG -I\OpenSSL\include -IC:\Python26\include -IC:\Python26\PC /Tcsrc/crypto/x509name.c /Fobuild\temp.win-amd64-2.6\Release\src/crypto/x509name.obj
x509name.c
src/crypto/x509name.c(16) : error C2133: 'crypto_X509Name_methods' : unknown size
error: command '"C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\BIN\amd64\cl.exe"' failed with exit status 2
当我查看相关来源时,我在第16行看到以下内容:

static PyMethodDef crypto_X509Name_methods[];
我的C已经生锈了,所以我不记得你能不能这样做。由于这是一个Python库,我想这是为了在gcc中编译而编写的,但我没有在这台计算机上安装Cygwin环境。是否有一些开关,我可以使用VS2008来编译这段代码

答复: 在代码的后面,有以下内容:

/*
 * ADD_METHOD(name) expands to a correct PyMethodDef declaration
 *   {  'name', (PyCFunction)crypto_X509_name, METH_VARARGS }
 * for convenience
 */
#define ADD_METHOD(name)        \
    { #name, (PyCFunction)crypto_X509Name_##name, METH_VARARGS,  crypto_X509Name_##name##_doc }
static PyMethodDef crypto_X509Name_methods[] =
{
    ADD_METHOD(hash),
    ADD_METHOD(der),
    ADD_METHOD(get_components),
    { NULL, NULL }
};
#undef ADD_METHOD
根据尼尔·巴特沃斯的建议,我将错误的行改为:

static PyMethodDef crypto_X509Name_methods[];
致:

以及编译的代码


感谢大家。

由于它是静态的,因此必须在某些编译单元(C源文件)中以恒定大小初始化它。

您可能遇到如下情况:

#include <stdio.h>

static int a[];     // declaration

// lots of code

int a[3];           // use
#包括
静态int a[];//宣言
//很多代码
int a[3];//使用

它用gcc编译为C。我不确定它是否应该(它不是有效的C++),但作为一名C语言律师,我还不能肯定地告诉你。

它必须在同一个编译单元中初始化,你的意思是,对吗?当然可以(但是警告,它[通常]不是同一个文件)。您必须搜索定义/初始化crypto_X509; Name_方法的位置,并在两个位置使用相同大小的方法。
#include <stdio.h>

static int a[];     // declaration

// lots of code

int a[3];           // use