windows,用vc編譯器cl.exe,編譯nginx的第三方模組,有類似這樣的程式碼報(bào)錯(cuò):
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;
錯(cuò)誤出在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的編譯器要求將變數(shù)的聲名放在一個(gè)函數(shù)塊的頭部,而c 沒有這樣的要求造成的。把聲名的三個(gè)變數(shù)放到函數(shù)的開頭就可以了。
同樣的程式碼在gcc下是可以編譯通過(guò)的。
請(qǐng)問vc有沒有什麼編譯選項(xiàng)可以支援高階一點(diǎn)的C。我用的vc編譯器已經(jīng)是vs2012自帶的那個(gè)了
沒有辦法。
因?yàn)閂C就算到最新的2013也支援C89標(biāo)準(zhǔn),因?yàn)樗举|(zhì)上是個(gè)C++編譯器,而你需要的語(yǔ)法是在C99標(biāo)準(zhǔn)後才支援的,所以GCC能編譯通過(guò)。
解決方法有二:
一,就是把程式碼改為符合C89標(biāo)準(zhǔn)。
二,使用mingw編譯
Visual Studio 2012 不支援 C99,但是 Visual Studio 2013 支援。
參考:C99 維基百科