哪个版本的C更适合学生学习 - C89/90或C99?

Jas*_*son 19 c standards c99 c89

在下个月开始系统编程之前,我正在研究学习C基础知识和语法.在做一些阅读时,我遇到了C89/99标准.根据维基百科,

C99引入了几个新功能,包括内联函数,几种新数据类型(包括long long int和表示复数的复杂类型),可变长度数组,支持可变参数宏(可变arity的宏)和支持单行以//开头的注释,如BCPL或C++.其中许多已经在几个C编译器中实现为扩展.

C99在很大程度上向后兼容C90,但在某些方面更严格; 特别是,缺少类型说明符的声明不再具有隐式假定的int.标准宏 STDC_VERSION定义为值199901L,表示C99支持可用.GCC,Sun Studio和其他编译器现在支持C99的许多或所有新功能.

我借了一份K&R,第2版,它使用了C89标准.对于学生来说,使用C89是否会使K&R涵盖的某些主题失效,如果是这样,我应该注意什么?

Pup*_*ppy 19

没有理由在C99上学习C89或C90-它已被字面上取代了.很容易找到C99编译器,没有任何理由学习早期的标准.

这并不意味着你的教授不会强迫你使用C89.从这里发布的标记作业的各种问题来看,我感觉很多很多C(以及不幸的是,C++)课程自C89以来没有继续发展.

从初学者的角度来看,你可能没有真正注意到差异 - 有很多C都是C99和C89/90.

  • "很容易找到C99编译器" - GCC仍然需要一个`-std = c99`标志,微软显然不能正确支持它http://stackoverflow.com/questions/2656080/vs-2008-and-c99 (9认同)
  • 很公平,+1的答案.不过,我不同意"回到"C是一个疯狂的举动.我是专业的C++程序员,但我仍然喜欢C的极简主义. (2认同)
  • @DeadMG:GCC*不*完全支持C99,有一些遗漏(通常可以忽略不计,但在某些平台上比其他平台更糟). (2认同)

Fre*_*Foo 11

使用C99标准,它更新,并具有更多功能.特别有用的可以是bool在类型<stdbool.h>int32_t等家庭的类型; 后者可以防止许多依赖于int具有特定大小的不可移植代码.AFAIK,它并没有使K&R失效,尽管现在一些示例程序可能会以稍微不同的风格编写.

请注意,某些编译器仍然不能正确支持C99.我相信GCC仍然需要使用一个-std=c99标志才能启用它; 许多Unix/Linux系统都有一个c99包装GCC并启用C99 的命令.

许多大学教授也是如此.我通过递交bool我大学一年级的课程让我感到惊讶.他从未在C中听说过那种类型:)