当前位置:  开发笔记 > 编程语言 > 正文

声明没有初始大小的数组

如何解决《声明没有初始大小的数组》经验,为你挑选了2个好方法。

我正在尝试使用Visual Studio 2008在Windows Vista x64上编译OpenSSL(pyOpenSSL)的Python绑定.当我运行时python setup.py build_ext -I C:\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

根据Neil Butterworth的建议,我改变了以下错误:

static PyMethodDef crypto_X509Name_methods[];

至:

static PyMethodDef crypto_X509Name_methods[4];

和编译的代码.

谢谢大家.



1> Hernán..:

由于它是静态的,因此必须在某些编译单元(C源文件)中使用常量大小进行初始化.



2> 小智..:

你可能有这样的情况:

#include 

static int a[];     // declaration

// lots of code

int a[3];           // use

用gcc编译成C语言.我不确定它应该是什么(它不是有效的C++)但我不足以让C语言律师肯定地告诉你.

推荐阅读
mobiledu2402851323
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有