搜索

首页  >  问答  >  正文

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自带的那个了

淡淡烟草味淡淡烟草味2781 天前1005

全部回复(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
  • 取消回复