この章では、次の情報を提供します。
この節では、Sun Studio 12 C 5.9 コンパイラリリースで導入された新機能を簡単に説明します。
C コンパイラは次の Linux ディストリビューションで使用できます (x86 および x64)。
SUSE Linux Enterprise Server 9 Service Pack 3 以降。
Red Hat Enterprise Linux 4。
2.6 カーネルに基づいた、その他の Linux ディストリビューション (正式サポートなし)。
メモリーモデルを指定する新しい -m32|-m64 オプション。
旧式のフラグを置き換える -xarch の新しいフラグ。
UltraSPARC T2 および SPARC64vi プロセッサのコード生成を提供する -xtarget と -xchip の新しい値。
fused multiply-add 命令をサポートしているプロセッサで、この命令の生成を可能にする新しいフラグ -fma=fused。
x86 プラットフォームおよび SPARC プラットフォームで対応している明示的な先読みマクロ。(-xprefetch=explicit)
このリリースでは、32 ビットまたは 64 ビットバイナリのコンパイルを指定する方法が変更されました。「B.2.68 -xarch=isa」オプションは、暗黙的なメモリーモデル (32 ビット ILP32 または 64 ビット LP64 のそれぞれの定義) で使用できなくなりました。現在は、対象プロセッサの命令セットの指定にのみ使用します。
新しい 「B.2.41 -m32|-m64」オプションを使用して、対象コンパイルのメモリーモデルを指定します。
ILP 32 モデルでは、C 言語の int、long、およびポインタデータ型はすべて 32 ビット幅であることを指定します。LP64 モデルでは、long およびポインタデータ型はすべて 64 ビット幅であることを指定します。Solaris および Linux OS は、LP64 メモリーモデルの大きなファイルや大きな配列もサポートします。
-m64 を使用してコンパイルを行う場合、結果の実行可能ファイルは、64 ビットカーネルを実行する Solaris OS または Linux OS の 64 ビット UltraSPARC(R) または x86 プロセッサでのみ動作します。64 ビットオブジェクトのコンパイル、リンク、および実行は、64 ビット実行をサポートする Solaris または Linux OS でのみ行うことができます。
x86 Solaris プラットフォーム用にコンパイルを行う場合に注意が必要な、重要な事項がいくつかあります。
従来の Sun 仕様の並列化プラグマは、x86 では使用できません。代わりに OpenMP を使用してください。従来の並列化指令を OpenMP へ変換する方法については、『Sun Studio 12: OpenMP API ユーザーズガイド』を参照してください。
-xarch を sse、sse2、sse2a、または sse3 に設定してコンパイルしたプログラムは、必ずこれらの拡張と機能を提供するプラットフォームでのみ実行してください。
Solaris 9 4/04 以降の Solaris OS リリースは、Pentium 4 互換プラットフォームでは SSE/SSE2 に対応しています。これより前のバージョンの Solaris OS は SSE/SSE2 に対応していません。-xarch で選択した命令セットが、実行中の Solaris OS で有効ではない場合、コンパイラはその命令セットのコードを生成またはリンクできません。
コンパイルとリンクを個別に行う場合は、必ずコンパイラを使用し、同じ -xarch の設定でリンクして、正しい起動ルーチンがリンクされるようにしてください。
x86 の 80 ビット浮動小数点レジスタが原因で、x86 での数値結果が SPARC の結果と異なる場合があります。この差を最小にするには、-fstore オプションを使用するか、ハードウェアが SSE2 をサポートしている場合は x-arch=sse2 でコンパイルします。
Solaris と Linux でも、組み込み数学ライブラリ (たとえば、sin(x)) が同じでないため、数値結果が異なることがあります。
Sun Studio 11 と Solaris 10 OS から、これらの特殊化された -xarch ハードウェアフラグを使用してコンパイルし、構築されたプログラムバイナリは、適切なプラットフォームで実行されることが確認されます。
Solaris 10 以前のシステムでは妥当性検査が行われないため、これらのフラグを使用して構築したオブジェクトが適切なハードウェアに配備されることをユーザが確認する必要があります。
これらの -xarch オプションでコンパイルしたプログラムを、適切な機能または命令セット拡張に対応していないプラットフォームで実行すると、セグメント例外や明示的な警告メッセージなしの不正な結果が発生することがあります。
このことは、.il インラインアセンブリ言語関数を使用しているプログラムや、SSE、SSE2、SSE2a、および SSE3 の命令および拡張機能を利用している __asm() アセンブラコードにも当てはまります。
このマニュアルで使用される C99 という用語は、ISO/IEC 9899:1999 プログラミング言語 C を表します。C90 という用語は、ISO/IEC 9899:1990 の C プログラミング言語を意味します。
Solaris 10 ソフトウェアより前のオペレーティングシステム上では、このコンパイラは、ISO/IEC 9899:1999, Programming Language - C 規格に規定されている言語機能の大部分に対応しています。Solaris 10 ソフトウェアでは、このコンパイラは、C99 規格に完全に準拠しています (-xc99=all,lib を指定した場合)。
このコンパイラはまた、ISO/IEC 9899:1990, Programming Languages - C 規格にも準拠しています。
このコンパイラは従来の K&R C (Kernighan and Rithcie、つまり ANSI C の前段階) もサポートしているため、ISO C への移行が容易に行えます。
C90 の実装固有の動作については、「D.1.17 _Pragma」を参照してください。
サポートしている C99 の機能については、表 C–6 を参照してください。
C コンパイラの readme ファイルでは、次に示すようなコンパイラに関する重要な情報について説明しています。
マニュアルの印刷後に判明した情報
新規および変更された機能
ソフトウェアの修正事項
問題および解決方法
制限事項と互換性の問題
C readme ファイルをテキストで参照するには、コマンドプロンプトに次のように入力します。
example% cc -xhelp=readme |
HTML 版の README を参照するには、Netscape Communicator 4.0 またはそれと互換性のあるブラウザで、次のファイルを開きます。
/opt/SUNWspro/docs/ja/index.html
製品ソフトウェアが /opt 以外のディレクトリにインストールされている場合は、システム管理者に実際のパスをお尋ねください。ブラウザに HTML 文書の索引が表示されます。readme を開くには、索引で該当するエントリを見つけ、そのタイトルをクリックします。
オンラインマニュアル (man) ページは、コマンド、関数、サブルーチン、およびそれらの集合について即座に参照できるマニュアルを提供します。
マニュアルページを表示するには、次のように入力してください。
example% man topic |
C のマニュアル全体を通して、マニュアルページのリファレンスは、トピック名とマニュアルのセクション番号で表示されます。cc(1) を表示するには、man cc と入力 します。たとえば ieee_flags(3M) など、ほかのセクションを表示するには、man コマンドに -s オプションを使用します。
example% man -s 3M ieee_flags |
C コンパイルシステムはコンパイラ、アセンブラ、およびリンカーから構成されます。cc コマンドは、コマンド行オプションでほかの指定をしないかぎり、この 3 つの構成要素をそれぞれ自動的に起動します。
表 A–15 では、cc コマンドで使用できるオプションについて説明しています。
次の図に C コンパイルシステムの構成を示します。
構成要素 |
内容の説明 |
使用時の注意 |
---|---|---|
プリプロセッサ (前処理系) |
-Xs のみ |
|
コンパイラ (-Xs 以外のモードではプリプロセッサが組み込まれている) | ||
静的同期バグ検出 |
(SPARC) |
|
コードオプティマイザ (最適化部) |
-O、-xO2、-xO3、-xO4、-xO5、-fast |
|
アセンブラ | ||
コード生成、インライン機能、アセンブラ |
(SPARC) |
|
内部手続きオプティマイザ |
(SPARC) |
|
ポストオプティマイザ |
(SPARC) |
|
中間コード翻訳 |
(x86) |
|
コードジェネレータ |
(x86) |
|
内部手続き解析プログラム |
(x86) |
|
リンカー | ||
コメントセクションの操作 |
-mr |
C プログラムの開発、保守、改良を行うときに役立つツールは多数あります。本書では、C にもっとも密接な 2 つのツール、cscope と lint について説明します。また、ツールごとにマニュアルページが用意されています。
ソースの表示、デバッグ、およびパフォーマンス解析を行うツールも付属しています。「Sun Studio マニュアルへのアクセス方法」を参照してください。