nginx – C-Sprache, VC-Compiler cl, wie man Variablen unterstützt, ohne sie am Anfang der Funktion deklarieren zu müssen
淡淡烟草味
淡淡烟草味 2017-05-16 17:26:29
0
3
1002

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

淡淡烟草味
淡淡烟草味

Antworte allen(3)
为情所困

没有办法。
因为VC哪怕到最新的2013也支持C89标准,因为它本质上是个C++编译器,而你需要的语法是在C99标准后才支持的,所以GCC能编译通过。

解决办法有二:
一,就是把代码更改为符合C89标准。
二,使用mingw编译

刘奇

编译命令里添加

-c99

曾经蜡笔没有小新

Visual Studio 2012 不支持 C99,但是 Visual Studio 2013 支持。
参考:C99 维基百科

Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage