以双下划线开头的类型是否表示模拟类型?

Yev*_*hko 2 c floating-point x86

有一个long double用于80bit浮点的类型,x87扩展具有使用此数据类型的指令。

我知道__float128编译器会模拟这种类型的基本操作。但是,无需模拟80位浮点运算。那么目的是__float80什么?

我猜有些架构没有80位浮点数据类型,__float80就像跨平台类型一样。如果CPU能够以80bit fp工作,则long double表示与相同__float80。如果long double不存在,则不存在或引用其他内容,并且编译器模拟80位fp操作,因此只能__float80用于表示80位浮点。

我对吗?你能给我看看一些例子吗?

Chr*_*ons 5

双下划线表示该标识符保留给C实现使用。

C11标准7.1.3:保留标识符

  • 以下划线,大写字母或另一个下划线开头的所有标识符始终保留供任何使用。
  • 在普通和标记名称空间中,所有以下划线开头的标识符始终保留为具有文件范围的标识符。

基本上,这是保留的名称空间,以避免与为通用创建的标识符冲突。该实现可以确保它不会破坏自己的标识符,并且只要您的程序不使用以双下划线(或下划线后跟大写字母)开头的保留标识符空间,就不会发生冲突。