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
没有办法。
因为VC哪怕到最新的2013也支持C89标准,因为它本质上是个C++编译器,而你需要的语法是在C99标准后才支持的,所以GCC能编译通过。
解决办法有二:
一,就是把代码更改为符合C89标准。
二,使用mingw编译
编译命令里添加
-c99
Visual Studio 2012 不支持 C99,但是 Visual Studio 2013 支持。
参考:C99 维基百科