C变量声明位置

4

可能重复:
C语言中变量声明的位置

我真的不理解为什么当我像下面代码片段中那样声明变量'm'时,它为什么不起作用???我在使用之前就声明了m,所以有什么问题吗?谢谢。

    int main(){

    int a[] = {2,-4,6,47,59,-6,0};
    sort(a, 7);

    int m;
    for(m = 0; m < 7; m++){
        printf("%d ",a[m]);
    }
}

但是如果我把声明放在数组之前,它就能工作。


你使用了哪些编译选项? - squiguy
4个回答

5

看起来你是在使用ANSI C模式编译。在C89中,变量声明仅允许在块的开头。

自从C99之后,这个限制被取消了。使用-std=c99编译,这将允许你在任何地方声明变量。


我在Visual Studio 2010中使用编译器,开始一个C++项目,并在属性中更改为编译为C代码(/TC)。这是什么意思? - exeq
Visual Studio仅支持少数C99功能。因此,您可能需要在块的开头声明变量。只需将int m;移动到main()的顶部即可。更多信息请参见:Visual Studio对新的C / C ++标准的支持? - P.P

2
据我所知,在C语言中,所有的声明都必须放在代码之前。

2
这在C89中曾经是这样,但自从C99以来就不再是这样了。 - Daniel Fischer
我在2001年学习C语言作为入门课程,我责怪我的教练没有告诉我这个信息哈哈。 - Abdusalam Ben Haj
可能他当时不知道,那只是两年而已。 - Daniel Fischer

1

你可能正在使用部分支持C99(或根本不支持)的编译器,其中禁止了就地变量声明。

使用这样的编译器需要在“可执行”代码之前声明变量。

这是C89及以前版本的限制。


0

其实这不是一个答案,但我还不能在问题下面评论。 我同意上面的人们所说的关于你使用的C实现引起了错误。我建议你尝试使用 for (int m = 0, ...),有两个原因:一是看看它是否编译通过,二是作用域(从外观上看,你不需要在for循环之外使用m) 希望这可以帮到你。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接