C语言,vc编译器cl,如何支持变量不必在函数开始声明-问答-阿里云开发者社区-阿里云

开发者社区> 问答> 正文

C语言,vc编译器cl,如何支持变量不必在函数开始声明

2016-06-07 16:43:10 2288 1

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

取消 提交回答
全部回答(1)
  • a123456678
    2019-07-17 19:30:28

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

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

    0 0
相关问答

40

回答

[@徐雷frank][¥20]什么是JAVA的平台无关性

大河人家 2018-10-29 23:55:20 144692浏览量 回答数 40

162

回答

惊喜翻倍:免费ECS+免费环境配置~!(ECS免费体验6个月活动3月31日结束)

豆妹 2014-10-29 17:52:21 226076浏览量 回答数 162

18

回答

阿里云开放端口权限

xcxx 2016-07-20 15:03:33 646700浏览量 回答数 18

33

回答

Win Server 2003-2016 加密勒索事件必打补丁合集

妙正灰 2017-05-15 10:44:38 280349浏览量 回答数 33

38

回答

安全组详解,新手必看教程

我的中国 2017-11-30 15:23:46 259786浏览量 回答数 38

294

回答

Linux Bash严重漏洞修复紧急通知(已全部给出最终修复方案)

qilu 2014-09-25 13:26:50 434516浏览量 回答数 294

249

回答

阿里云LNAMP(Linux + Nginx + Apache + MySQL + PHP)环境一键安装脚本

云代维 2014-02-14 15:26:06 305575浏览量 回答数 249

97

回答

Redhat/CentOS一键安装web环境全攻略

xiaofanqie 2011-08-11 14:51:38 123677浏览量 回答数 97

23

回答

【精品问答合集】Redis热门问答

李博 bluemind 2019-05-29 16:36:15 127025浏览量 回答数 23

37

回答

【云服务器教程征集令】这个六一阿里云邀您来吐槽!

fanyue88888 2012-06-01 18:55:41 113966浏览量 回答数 37
+关注
0
文章
14879
问答
问答排行榜
最热
最新
相关电子书
更多
《Nacos架构&原理》
立即下载
《看见新力量:二》电子书
立即下载
云上自动化运维(CloudOps)白皮书
立即下载