Windows, verwenden Sie den VC-Compiler cl.exe, um das Drittanbietermodul von Nginx zu kompilieren, und es wird eine Fehlermeldung ?hnlich diesem Code angezeigt:
static ngx_int_t
ngx_http_zip_main_request_header_filter(ngx_http_request_t *r)
{
ngx_http_variable_value_t *vv;
ngx_http_zip_ctx_t *ctx;
if ((ctx = ngx_http_get_module_ctx(r, ngx_http_zip_module)) != NULL)
return ngx_http_next_header_filter(r);
if ((vv = ngx_palloc(r->pool, sizeof(ngx_http_variable_value_t))) == NULL)
return NGX_ERROR;
/* Look for X-Archive-Files */
ngx_int_t variable_header_status = NGX_OK;
Der Fehler ist ngx_int_t variable_header_status = NGX_OK;
:
mod_zip/ngx_http_zip_module.c(195) : error C2275: 'ngx_int_t' : illegal use of t
his type as an expression
Nach der überprüfung liegt der Grund darin: Der C-Compiler verlangt, dass die Variablendeklaration am Kopf eines Funktionsblocks platziert wird, C++ hat eine solche Anforderung jedoch nicht. Platzieren Sie einfach die drei deklarierten Variablen am Anfang der Funktion.
Derselbe Code kann unter gcc kompiliert und übergeben werden.
Bitte sagen Sie mir, ob es in vc Kompilierungsoptionen gibt, die fortgeschritteneres C unterstützen k?nnen. Der vc-Compiler, den ich verwende, ist bereits derjenige, der mit vs2012 geliefert wird
沒有辦法。
因?yàn)閂C哪怕到最新的2013也支持C89標(biāo)準(zhǔn),因?yàn)樗举|(zhì)上是個(gè)C++編譯器,而你需要的語法是在C99標(biāo)準(zhǔn)后才支持的,所以GCC能編譯通過。
解決辦法有二:
一,就是把代碼更改為符合C89標(biāo)準(zhǔn)。
二,使用mingw編譯
Visual Studio 2012 不支持 C99,但是 Visual Studio 2013 支持。
參考:C99 維基百科