Oracle® Developer Studio 12.5:C 用户指南

退出打印视图

更新时间: 2016 年 7 月
 
 

2.15 扩展

C 编译器针对 C 语言实现了许多扩展。

2.15.1 _Restrict 关键字

C 编译器支持 _Restrict 关键字,该关键字与 C99 标准中的 restrict 关键字等效。 未指定 -pedantic 时,_Restrict 关键字适用于任何 -std 标志值,而限制关键字仅适用于 -std=c99-std=c11

有关支持的 C11 特性的更多信息,请参见C11 的功能

有关支持的 C99 特性的更多信息,请参见C99 的功能

2.15.2 __asm 关键字

__asm 关键字(注意开头的两个下划线)是 asm 关键字的同义字。 在使用 -pedantic 时,编译器将针对 asm 关键字的使用发出警告。请使用 __asm 避免这些警告。__asm 语句采用以下形式:

__asm("string");

其中 string 是有效的汇编语言语句。

该语句将给定的汇编程序文本直接发送到汇编文件。在文件作用域(而不是函数作用域)声明的基本 asm 语句称为全局 asm 语句。其他编译器将其称为顶级 asm 语句。

全局 asm 语句以其指定顺序发出,保留相对于彼此的顺序,并保持相对于前后函数的位置。

在较高优化级别中,编译器可能会删除已确定不被引用的函数。由于编译器得出从全局汇编语言语句中引用了哪些函数的结果,因此可能会无意中删除这些函数。

请注意,那些提供模板及操作数规范的扩展 asm 语句不允许作为全局语句。__asm__asm__asm 关键字的同义字,可以互换使用。

指定特定于体系结构的指令时,可能需要指定正确的 -xarch 值以避免发生编译错误。

2.15.3 __inline__inline__

__inline__inline__inline 关键字的同义字(C 标准,第 6.4.1 节)

2.15.4 __builtin_constant_p()

__builtin_constant_p 是编译器内置函数。它接受一个数值参数,如果参数是一个编译时常量,则返回 1。返回值 0 意味着编译器无法确定参数是否是编译时常量。此内置函数的典型用法是在宏中用于手动编译时优化。

2.15.5 __FUNCTION____PRETTY_FUNCTION__

__FUNCTION____PRETTY_FUNCTION__ 是预定义标识符,这些标识符包含词法上封闭的函数的名称。它们在功能上等效于预定义标识符 __func__。在 Oracle Solaris 平台上,__FUNCTION____PRETTY_FUNCTION__-Xs-Xc 模式下不可用,在使用 -pedantic 时也不可用。

2.15.6 untyped _Complex

作为扩展,untyped _Complex 在缺省语言标准选项下现在缺省为 double _Complex。使用 -pedantic(严格遵循非 ANSI 构造的错误/警告),会生成一个警告。

2.15.7 __alignof__

__alignof__ 运算符可让您查询对象对齐方法,或类型通常需要的最小对齐。 其语法和 sizeof 类似。

例如,__alignof__ (float) 为 4。

如果 __alignof__ 的操作数是一个对象而不是类型,则其值是其类型的所需对齐,并考虑使用对齐相关的 __attribute__ 扩展指定的任何最小对齐。

2.15.8  __atomic 内置函数

Oracle Developer Studio C 编译器实现了 gcc __atomic 内置函数来执行可以识别内存模型的原子操作。