是否有充分的理由继续编写与ANSI C(C89/90)兼容的代码?

是否有充分的理由继续编写与ANSI C(C89/90)兼容的代码?,c,C,在我的大学里,我的CS1老师建议我们不要使用for(inti=0;[code];i++),因为在C99之前的C版本上,用for循环声明变量不会编译。作为计算机科学专业的学生,有什么正当的理由吗?由于它在近二十年前已经标准化,我认为任何仍然支持/开发的软件在实现这一点上都不会有问题 从我的浏览中可以看出,极低级别的硬件开发可能使用C90 ish代码库,但这似乎是一个非常边缘的情况。这在很大程度上取决于编写代码的目标。在我看来,我只会在我希望在嵌入式设备上编译的项目上以及在开发工具链异常受限的设备上

在我的大学里,我的CS1老师建议我们不要使用
for(inti=0;[code];i++)
,因为在C99之前的C版本上,用for循环声明变量不会编译。作为计算机科学专业的学生,有什么正当的理由吗?由于它在近二十年前已经标准化,我认为任何仍然支持/开发的软件在实现这一点上都不会有问题


从我的浏览中可以看出,极低级别的硬件开发可能使用C90 ish代码库,但这似乎是一个非常边缘的情况。

这在很大程度上取决于编写代码的目标。在我看来,我只会在我希望在嵌入式设备上编译的项目上以及在开发工具链异常受限的设备上使用ANSI C。我所做的大多数项目都是特定于某个特定平台的,我与之交互的大多数平台都有现代化的编译器和开发环境。我倾向于使用可用的工具。:-)今天,嵌入式领域比以前广泛得多。每个人都可以得到一个开发板,在他们的厨房里进行“极低级别的硬件开发”。因此,它并不像看上去那样边缘化。OTOH,今天大多数硬件都有一个现代化的、符合要求的编译器。因此,只要你不必使用一些旧的工具,就不必坚持使用旧的标准。有一家鲜为人知的公司的编译器——他们的名字叫微软——不一定支持它。它可能取决于你的MS VisualStudio的版本,但是它们的C++支持很好,但是它们的C支持更接近过时(特别是在旧版本中)。还有一些版本在使用时不允许声明变量-它们都必须在语句块顶部定义(或声明){…变量定义…;…可执行语句…}。不幸的是,如果我们允许,我们还得到了另一个疯狂的C99变量——混合变量和代码。写于2012年。哇。截至2017年,仍然有一些不支持C99的编译器,因此(遗憾的是)你可能会遇到需要ANSI C的编译器。然而,在我看来,这是人们可以很容易适应的,如果可能的话,我更希望我的学生编写更简单的代码。我想说,如果你有一个实际的C99编译器,要求学生将所有变量声明移到函数顶部会适得其反。我也相信这个问题是相当广泛的/基于观点的,所以它很难适合这样做。