文档章节

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

mickelfeng
 mickelfeng
发布于 2015/09/18 00:03
字数 327
阅读 96
收藏 2
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 支持。

© 著作权归作者所有

共有 人打赏支持
mickelfeng

mickelfeng

粉丝 235
博文 2752
码字总数 596619
作品 0
成都
高级程序员
私信 提问
打造Windows下的C/C 命令行编译环境

在Linux下,Kris是 倾向于在终端中使用gcc和g++来编译C/C++的,在Windows下相信很多人都是选择臃肿的Visual Studio,我亦不免如此。但是,我希望在Windows下也能像Linux下一样简洁编程,于是...

徐学良
2016/01/04
13
0
再探C++Primer (1) 关于编译及IO流

之前在看primer的时候,第一章的内容一般都会跳过去,今天打算从头再看一次的时候,反而注意到了第一章的东西,很简单的东西,也学到了一些之前没有关注的内容。 在之前都是使用现成的IDE来编...

大鲸鱼锅锅
2016/07/02
11
0
[Zephir官方文档翻译之三] 介绍 Zephir

介绍 Zephir Zephir是一种可以让PHP开发者尝试编写和编译可以被PHP执行代码的一种语言。它是动态/静态类型,它的一些特性对于PHP 开发者来说是非常的相似的。 Zephir的名字是取自Zend Engine...

风一样的世界
2014/09/26
0
0
vs2010 命令行编译C/C++程序

电脑上装了 VS2010 (其他版本亦可)在 Microsoft Visual Studio 10.0VCbin 中可以找到 cl.exe . 配置环境变量: 变量名 : Path 变量值 : %安装路径%Microsoft Visual Studio 10.0VCbin; %安装...

outdoxl
2013/07/22
0
0
C Primer Plus 第2章 C语言概述

2.1一个简单的实例 程序清单2.1 first.c程序 ------ #include <stdio.h> int main() { int num; num=1; printf("I am a simple"); printf("computer.n"); printf("My favorite number is %d......

idreamo
2016/05/07
37
0

没有更多内容

加载失败,请刷新页面

加载更多

EFCore DbFirst 生成实体类

1、Nuget引用: Install-package Microsoft.EntityFrameworkCore.Tools Install-package Microsoft.EntityFrameworkCore.Design Install-package Microsoft.EntityFrameworkCore.SqlServer 2......

万邦科技-Anthony
56分钟前
2
0
OSChina 周三乱弹 —— 哽住

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @蓝瞳 :分享高橋広樹的单曲《銀河沿線'05<Vo>》:一直暗恋却无法表白的女孩在电车上疲倦不堪累得靠在他的肩上,播磨拳儿终于忍不住流下了眼泪...

小小编辑
今天
612
10
shell输入内容时不显示内容

简介 大家都知道当我们ssh登录linux服务器的时候输入密码密码是不显示在屏幕上的,同样在我们写shell脚本的时候在获取用户密码的时候,有时候也希望不显示密码,这个是怎么做的呢 实例脚本 ...

bboysoulcn
今天
4
0
第11章 多线程

程序、进程、线程 程序(program)是为完成特定任务、用某种语言编写的一组指令的集合。即指一段静态的代码,静态对象。 **进程(process)**是程序的一次执行过程或是正在运行的一个程序。动...

流小文
今天
10
0
SpringBoot引入第三方jar包或本地jar包的处理方式

在开发过程中有时会用到maven仓库里没有的jar包或者本地的jar包,这时没办法通过pom直接引入,那么该怎么解决呢 一般有两种方法 - 第一种是将本地jar包安装在本地maven库 - 第二种是将本地j...

独钓渔
今天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部