当前位置:  开发笔记 > 编程语言 > 正文

为什么Microsoft的C编译器需要函数开头的变量?

如何解决《为什么Microsoft的C编译器需要函数开头的变量?》经验,为你挑选了2个好方法。

我目前正在写一个C(不是C++).似乎Microsoft的C编译器要求在函数之上声明所有变量.

例如,以下代码不会通过编译:

int foo(int x) {
    assert(x != 0);
    int y = 2 * x;
    return y;
}

编译器在第三行报告错误,说

error C2143: syntax error : missing ';' before 'type'

如果代码更改为如下所示,它将通过编译:

int foo(int x) {
    int y;
    assert(x != 0);
    y = 2 * x;
    return y;
}

如果我将源文件名更改.c.cpp,则编译也将通过.

我怀疑有一个选项可以关闭编译器的严格性,但我还没有找到它.任何人都可以帮忙吗?

提前致谢.

我正在使用Visual Studio 2008 SP1附带的cl.exe.

添加:

谢谢大家回答!看来我必须使用微软的cl.exe生活在C89中.



1> dwc..:

它看起来像是使用C89标准,它要求在任何代码之前声明所有变量.您可以使用文字等初始化它们,但不能混合代码和变量.

应该有一个编译器标志来在某处启用C99,它将为您提供您习惯的行为.

编辑:快速谷歌搜索看起来没有用于启用C99.你可能不得不忍受C89(这不是那么糟糕)或找到一个更好的C编译器(这会更好).



2> nothrow..:

Microsoft C编译器是C89编译器,并且不再升级,标准C99不是计划好的.对于C99中的普通C(变量不在块的开头),使用另一个编译器或C++扩展.

推荐阅读
贴进你的心聆听你的世界
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有