【发布时间】:2011-12-13 03:37:50
【问题描述】:
我最近成为了一门主要教授 C 的大学课程的助教。该课程在 C90 上标准化,主要是由于广泛的编译器支持。对于以前有 Java 经验的 C 新手来说,一个非常令人困惑的概念是变量声明和代码不得混合在一个块中(复合语句)的规则。
C99 终于解除了这个限制,但我想知道:有人知道它最初为什么存在吗?它是否简化了变量范围分析?它是否允许程序员指定在程序执行的哪个点堆栈应该为新变量增长?
如果完全没有任何目的,我认为语言设计者不会添加这样的限制。
【问题讨论】:
-
这里有一些关于这个的讨论:stackoverflow.com/questions/6488503/… 我不太确定为什么会这样决定,但老实说,我有点喜欢在开头声明的所有变量范围。
-
我知道这可能是一门高级主题,但我很想了解编译器如何优化东西,什么时候可以优化,什么时候不能,以及什么时候需要牢记在心让编译器优化 C 代码。程序员可能因为不懂编译器设计而不知道好的实践并产生缓慢的程序,但是关于编译自动优化的课程可能会起到很多作用。