C 编译器针对 C 语言实现了许多扩展。
C 编译器支持 _Restrict 关键字,该关键字与 C99 标准中的 restrict 关键字等效。 未指定 -pedantic 时,_Restrict 关键字适用于任何 -std 标志值,而限制关键字仅适用于 -std=c99 或 -std=c11。
有关支持的 C11 特性的更多信息,请参见C11 的功能。
有关支持的 C99 特性的更多信息,请参见C99 的功能。
__asm 关键字(注意开头的两个下划线)是 asm 关键字的同义字。 在使用 -pedantic 时,编译器将针对 asm 关键字的使用发出警告。请使用 __asm 避免这些警告。__asm 语句采用以下形式:
__asm("string");
其中 string 是有效的汇编语言语句。
该语句将给定的汇编程序文本直接发送到汇编文件。在文件作用域(而不是函数作用域)声明的基本 asm 语句称为全局 asm 语句。其他编译器将其称为顶级 asm 语句。
全局 asm 语句以其指定顺序发出,保留相对于彼此的顺序,并保持相对于前后函数的位置。
在较高优化级别中,编译器可能会删除已确定不被引用的函数。由于编译器得出从全局汇编语言语句中引用了哪些函数的结果,因此可能会无意中删除这些函数。
请注意,那些提供模板及操作数规范的扩展 asm 语句不允许作为全局语句。__asm 和 __asm__ 是 asm 关键字的同义字,可以互换使用。
指定特定于体系结构的指令时,可能需要指定正确的 -xarch 值以避免发生编译错误。
__inline 和 __inline__ 是 inline 关键字的同义字(C 标准,第 6.4.1 节)
__builtin_constant_p 是编译器内置函数。它接受一个数值参数,如果参数是一个编译时常量,则返回 1。返回值 0 意味着编译器无法确定参数是否是编译时常量。此内置函数的典型用法是在宏中用于手动编译时优化。
__FUNCTION__ 和 __PRETTY_FUNCTION__ 是预定义标识符,这些标识符包含词法上封闭的函数的名称。它们在功能上等效于预定义标识符 __func__。在 Oracle Solaris 平台上,__FUNCTION__ 和 __PRETTY_FUNCTION__ 在 -Xs 和 -Xc 模式下不可用,在使用 -pedantic 时也不可用。
作为扩展,untyped _Complex 在缺省语言标准选项下现在缺省为 double _Complex。使用 -pedantic(严格遵循非 ANSI 构造的错误/警告),会生成一个警告。
__alignof__ 运算符可让您查询对象对齐方法,或类型通常需要的最小对齐。 其语法和 sizeof 类似。
例如,__alignof__ (float) 为 4。
如果 __alignof__ 的操作数是一个对象而不是类型,则其值是其类型的所需对齐,并考虑使用对齐相关的 __attribute__ 扩展指定的任何最小对齐。
Oracle Developer Studio C 编译器实现了 gcc __atomic 内置函数来执行可以识别内存模型的原子操作。