C コンパイラの現在のリリースには、次の新機能と変更された機能があります。
アプリケーションコードの中に _m128/_m64 データ型を使用するパラメータまたは戻り値が関係する関数が含まれている場合は、x86 プラットフォームの Solaris OS、または Linux OS 上のコンパイラで作成されたオブジェクトファイルと、コンパイラの以前のバージョンには互換性がありません。このような関数を呼び出す .il インライン関数ファイル、アセンブラコード、または asm インライン文を使用しているユーザーは、この非互換性について認識する必要があります。
-xtarget の新しい値は、woodcrest、penryn、nehalem、core2 の各 x86 プロセッサ、および ultraT2plus と sparc64vii の各 SPARC プロセッサ用です。
-xarch の新しい値は、ssse3、sse4__1、sse4__2 の各 x86 アーキテクチャー、および sparcima の各 SPARC アーキテクチャー用です。
—xchip の新しい値は、sparc64vii、ultraT2plus の各 SPARC プロセッサ用です。—xchip の新しい値は、core2、penryn、 nehalem の各 x86 プロセッサ用です。
-xprofile=collect と -xprofile=use の各オプションは、マルチスレッド化された動的リンクアプリケーションのサポートを改善します。
-xcrossfile=1 オプションは、-xipo=1 オプションの別名になります。-xcrossfile=0 オプションは、もう効果がなくなりました。明示的に表記すると、-xcrossfile=1 および -xcrossfile=0 は、-xipo=1 と同等です。
Solaris プラットフォームでは、-xpec[=yes| no] オプションを指定すると、自動チューニングシステム (Automatic Tuning System、ATS) と組み合わせて使用するために再コンパイル可能な PEC バイナリを生成します。
-Y オプションは、i を引数として受け入れません。
SPARCSPARC プラットフォームでは、-xdepend オプションは -x03 レベル以上の最適化では暗黙的に有効になり、-fast オプションの展開の中にはもう含まれなくなりました。
OpenMP 3.0 のサポートには、libmtsk ライブラリが含まれます。OpenMP プログラムは、Solaris OS 内の libmtsk ライブラリの代わりに、デフォルトでこのライブラリにリンクします。
-xannotate[=yes|no ] (SPARC プラットフォームのみ) は、binopt(1) のようなバイナリ変更ツールを使用してあとで変換できるバイナリを作成するようコンパイラに指示します。
-Wi オプションはもう、内部手続きオプティマイザに引数を渡す目的では受け入れられなくなりました。
-xsb および -xsbfast の各オプションは廃止され、削除されました。
新しいフラグ [no%]init_local が、-xcheck オプションに追加されています。
__FUNCTION__ と __PRETTY_FUNCTION__ は定義済みの識別子であり、字句を包含する関数の名前が含まれています。これらは、c99 の定義済みの識別子である __func__ に相当する機能です。Solaris プラットフォームの -Xs および -Xc の各モードでコンパイルするときは、これらは使用できません。
標準 C では、switch 文内にある case のラベルに、ただ 1 つの値を関連付けることができます。Sun Studio C コンパイラでは、case 範囲 として知られる、一部のコンパイラに見られる拡張を許可しています。
条件付きの式では、2 番目のオペランドを省略できます。最初のオペランドが 0 以外である場合は、条件付きの式の値は、最初のオペランドと同じ値になります。
読み取り専用メモリー内で文字列リテラルの配置を有効および無効にする -features=[no%] conststrings オプションでは、デフォルトは -features=conststrings であり、これは非推奨の -xstrconst オプションを置き換えます。
プリプロセッサのインクルードファイルを指定するための -include filename オプションが追加されました。
プリプロセッサの ## 演算子に関する新しい動作: コンパイラは、未定義の ## 演算に対して警告の診断を発行するようになりました (C 規格、3.4.3 節)。未定義とは、## を前処理したときの結果に、単一のトークンではなく、複数のトークンが含まれていることを意味します (C 規格、6.10.3.3(3) 節)。未定義の ## 演算の結果は、現在では、## のオペランドを連結することによって作成された文字列をプリプロセスすることによって生成された個別のトークンのうち最初のものと定義されます。
グローバル asm 文。基本的な asm 文は、asm(assembly code) と表現されます。この文は、与えられたアセンブラテキストをアセンブリファイルに直接出力します。関数スコープではなくファイルスコープで宣言された基本的な asm 文は、「グローバル asm 文」と呼びます。ほかのコンパイラはこの文を「トップレベル asm 文」と呼びます。