簡體   English   中英

聲明沒有初始大小的數組

[英]Declaring arrays with no initial size

我正在嘗試使用Visual Studio 2008在Windows Vista x64上編譯OpenSSL(pyOpenSSL)的Python綁定。當我運行python setup.py build_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

根據Neil Butterworth的建議,我改變了以下錯誤:

static PyMethodDef crypto_X509Name_methods[];

至:

static PyMethodDef crypto_X509Name_methods[4];

和編譯的代碼。

謝謝大家。

由於它是靜態的,因此必須在某些編譯單元(C源文件)中使用常量大小進行初始化。

你可能有這樣的情況:

#include <stdio.h>

static int a[];     // declaration

// lots of code

int a[3];           // use

用gcc編譯成C語言。 我不確定它應該是什么(它不是有效的C ++)但我不足以讓C語言律師肯定地告訴你。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM