【问题标题】:What version of C does Python take?Python 采用什么版本的 C?
【发布时间】:2013-05-07 01:41:28
【问题描述】:

据我了解,Python 的规范版本是用 C89 编写的。我可能有兴趣稍后为 Python 编写一些基于 C 的扩展,但我对应该使用哪个版本的 C 有点困惑(在 Python 文档中找不到)。由于 Python 在 C89 中,我应该在 C89 中编码还是 C11 代码也可以工作?

【问题讨论】:

  • 据我所知,您的目标编译器支持的任何东西都应该没问题...
  • 你能再解开一点吗?
  • 来自Python devguide如果您在使用符合 C89 或 C99 的编译器时遇到编译错误,请打开错误报告。但这适用于 Python 核心
  • 在这种情况下,重要的是输出格式。 C89C99 都在您的计算机上编译为相同的格式:您甚至可以将 C 代码链接到其他语言(Java、Haskell)并让它工作。为什么 C 到 C 不能正常工作?
  • 对扩展的要求要宽松得多。例如,有很多用 C++ 编写的扩展。

标签: python python-2.7


【解决方案1】:

自 C89 以来,C 作为一门语言只经历了相对较小的演变。在 C89、C99 和 C11 的交叉点上编写代码非常容易,这就是我建议您做的事情(与其说是与 Python 交互,不如说是在 ABI 级别,而是作为一般源代码级别的最佳实践)。

在我的脑海中,通过将自己限制为 C89,您将失去 for (int i=0;…) 语法、可变长度数组和复数。

通过为 C99 编写,您将失去使用 C89 允许的隐式类型 int 声明变量的能力。这从来都不是一个好主意。

C11 清楚地表明,某些结构在以前的标准中存在歧义时是被禁止的:INT_MIN % (-1)(0,i++,j) + (0,j++,i)(discussion;参见 cmets)。

C99 中引入的最有用的添加可能是 C++ 风格的// cmets。但大多数编译器甚至在 C99 发布之前就已经接受了这些作为扩展,因此没有理由在 2013 年避免使用它们。

【讨论】:

  • 在相关说明中,我是否应该坚持使用 C11 处理与 C 相关的所有内容?
  • @EdgarArouiounian 如果您使用线程编程,那肯定是。否则,与 C99 相比,C11 几乎无法提供。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-22
  • 2011-04-30
  • 1970-01-01
  • 1970-01-01
  • 2014-11-04
相关资源
最近更新 更多