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自帶的那個了 沒有辦法。 由於VC哪怕到最新的2013也支持C89標準,由於它本質上是個C++編譯器,而你須要的語法是在C99標準後才支持的,因此GCC能編譯經過。 解決辦法有二: 一,就是把代碼更改成符合C89標準。 二,使用mingw編譯 編譯命令裏添加 -c99 Visual Studio 2012 不支持 C99,可是 Visual Studio 2013 支持。