搜尋

首頁  >  問答  >  主體

nginx - C語言,vc編譯器cl,如何支援變數不必在函數開始聲明

windows,用vc編譯器cl.exe,編譯nginx的第三方模組,有類似這樣的程式碼報錯:

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;

錯誤出在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

查了一下,原因:由於c的編譯器要求將變數的聲名放在一個函數塊的頭部,而c 沒有這樣的要求造成的。把聲名的三個變數放到函數的開頭就可以了。

同樣的程式碼在gcc下是可以編譯通過的。

請問vc有沒有什麼編譯選項可以支援高階一點的C。我用的vc編譯器已經是vs2012自帶的那個了

淡淡烟草味淡淡烟草味2741 天前974

全部回覆(3)我來回復

  • 为情所困

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

    沒有辦法。
    因為VC就算到最新的2013也支援C89標準,因為它本質上是個C++編譯器,而你需要的語法是在C99標準後才支援的,所以GCC能編譯通過。

    解決方法有二:
    一,就是把程式碼改為符合C89標準。
    二,使用mingw編譯

    回覆
    0
  • 怪我咯

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

    編譯指令裡加

    -c99

    回覆
    0
  • 曾经蜡笔没有小新

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

    Visual Studio 2012 不支援 C99,但是 Visual Studio 2013 支援。
    參考:C99 維基百科

    回覆
    0
  • 取消回覆