suchen

Heim  >  Fragen und Antworten  >  Hauptteil

nginx – C-Sprache, VC-Compiler cl, wie man Variablen unterstützt, ohne sie am Anfang der Funktion deklarieren zu müssen

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

淡淡烟草味淡淡烟草味2782 Tage vor1008

Antworte allen(3)Ich werde antworten

  • 为情所困

    为情所困2017-05-16 17:28:29

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

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

    Antwort
    0
  • 怪我咯

    怪我咯2017-05-16 17:28:29

    编译命令里添加

    -c99

    Antwort
    0
  • 曾经蜡笔没有小新

    曾经蜡笔没有小新2017-05-16 17:28:29

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

    Antwort
    0
  • StornierenAntwort