为什么C99中不包含定点类型?

ysa*_*sap 10 c gcc fixed-point c99

值得庆幸的是,complex类型修饰符被引入C99标准.我不明白为什么决定省略对定点运算的支持(特别是支持分数类型,如1.15 {signed}或0.32 {unsigned}),这些类型对于DSP编程是如此重要?

GCC是否通过扩展支持这些?

Jon*_*ler 9

为了解决"GCC是否通过扩展支持这些问题"的问题,我们可以引用"使用GNU编译器集合"(对于GCC版本4.4.0 - 添加的要点澄清).(GCC 4.9.0 URL等效于固定点 - 使用GNU编译器集合(GCC),但该部分是6.15而不是5.13.)

§5.13定点类型

作为扩展,GNU C编译器支持ISO/IEC DTR 18037的N1169草案中定义的定点类型.随着技术报告草案的变化,对GCC中定点类型的支持将不断发展.任何目标的调用约定也可能会发生变化.并非所有目标都支持定点类型.

定点类型是:

  • short _Fract,_Fract,long _Fract,long long _Fract,
  • unsigned short _Fract,unsigned _Fract,unsigned long _Fract, unsigned long long _Fract,
  • _Sat short _Fract,_Sat _Fract,_Sat long _Fract,_Sat long long _Fract,
  • _Sat unsigned short _Fract,_Sat unsigned _Fract,_Sat unsigned long _Fract, _Sat unsigned long long _Fract,
  • short _Accum,_Accum,long _Accum,long long _Accum,
  • unsigned short _Accum,unsigned _Accum,unsigned long _Accum, unsigned long long _Accum,
  • _Sat short _Accum,_Sat _Accum,_Sat long _Accum,_Sat long long _Accum,
  • _Sat unsigned short _Accum,_Sat unsigned _Accum,_Sat unsigned long _Accum, _Sat unsigned long long _Accum.

定点数据值包含小数和可选的整数部分.定点数据的格式各不相同,取决​​于目标机器.

您可以在此处找到提案草案的文本.

  • 但它确实回答了最后一个问题:海湾合作委员会是否支持他们? (3认同)

Jer*_*fin 9

它已被讨论/提出(例如,在N938,N953中),但那些论文仅提出它作为扩展,而不是主要标准的补充.这些似乎导致它被纳入N1169,这是TR 18037("支持嵌入式处理器的扩展")的草案,但这不被认为是完整的(草案似乎没有更新而).

我的猜测(尽管这只是猜测)是它的工作可能会被放弃(至少暂时)以集中精力完成C11.现在恢复工作是否可能取决于是否还有人仍然关心.编写和提交基于那些涵盖更多细节的早期论文,提供更多支持证据等的论文,可能有助于重新启动它(尽管我显然无法保证任何事情).

  • 仅供参考,2016 年 4 月,我与 WG14 的召集人 David Keaton 取得了联系。关于 TR18037 和 N1169 的状态,他的回复如下:“......目前,我们没有任何计划将 TR 18037 添加到 C 标准中。但是,我们注意到 TR 肯定正在被在行业中使用,我们计划保留它......” (2认同)