Sun Studio 12: C ユーザーズガイド

第 1 章 C コンパイラの紹介

この章では、次の情報を提供します。

1.1 Sun Studio 12 C 5.9 コンパイラの新機能

この節では、Sun Studio 12 C 5.9 コンパイラリリースで導入された新機能を簡単に説明します。

1.1.1 64 ビットプラットフォーム用のコンパイル

このリリースでは、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 でのみ行うことができます。

1.1.2 x86 の特記事項

x86 Solaris プラットフォーム用にコンパイルを行う場合に注意が必要な、重要な事項がいくつかあります。

従来の Sun 仕様の並列化プラグマは、x86 では使用できません。代わりに OpenMP を使用してください。従来の並列化指令を OpenMP へ変換する方法については、『Sun Studio 12: OpenMP API ユーザーズガイド』を参照してください。

-xarchssesse2sse2a、または 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)) が同じでないため、数値結果が異なることがあります。

1.1.3 バイナリの互換性の妥当性検査

Sun Studio 11 と Solaris 10 OS から、これらの特殊化された -xarch ハードウェアフラグを使用してコンパイルし、構築されたプログラムバイナリは、適切なプラットフォームで実行されることが確認されます。

Solaris 10 以前のシステムでは妥当性検査が行われないため、これらのフラグを使用して構築したオブジェクトが適切なハードウェアに配備されることをユーザが確認する必要があります。

これらの -xarch オプションでコンパイルしたプログラムを、適切な機能または命令セット拡張に対応していないプラットフォームで実行すると、セグメント例外や明示的な警告メッセージなしの不正な結果が発生することがあります。

このことは、.il インラインアセンブリ言語関数を使用しているプログラムや、SSE、SSE2、SSE2a、および SSE3 の命令および拡張機能を利用している __asm() アセンブラコードにも当てはまります。

1.2 準拠規格

このマニュアルで使用される 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 を参照してください。

1.3 C Readme ファイル

C コンパイラの readme ファイルでは、次に示すようなコンパイラに関する重要な情報について説明しています。

C readme ファイルをテキストで参照するには、コマンドプロンプトに次のように入力します。


example% cc -xhelp=readme

HTML 版の README を参照するには、Netscape Communicator 4.0 またはそれと互換性のあるブラウザで、次のファイルを開きます。

/opt/SUNWspro/docs/ja/index.html

製品ソフトウェアが /opt 以外のディレクトリにインストールされている場合は、システム管理者に実際のパスをお尋ねください。ブラウザに HTML 文書の索引が表示されます。readme を開くには、索引で該当するエントリを見つけ、そのタイトルをクリックします。

1.4 マニュアルページ

オンラインマニュアル (man) ページは、コマンド、関数、サブルーチン、およびそれらの集合について即座に参照できるマニュアルを提供します。

マニュアルページを表示するには、次のように入力してください。


example% man topic

C のマニュアル全体を通して、マニュアルページのリファレンスは、トピック名とマニュアルのセクション番号で表示されます。cc(1) を表示するには、man cc と入力 します。たとえば ieee_flags(3M) など、ほかのセクションを表示するには、man コマンドに -s オプションを使用します。


example% man -s 3M ieee_flags

1.5 コンパイラの構成

C コンパイルシステムはコンパイラ、アセンブラ、およびリンカーから構成されます。cc コマンドは、コマンド行オプションでほかの指定をしないかぎり、この 3 つの構成要素をそれぞれ自動的に起動します。

表 A–15 では、cc コマンドで使用できるオプションについて説明しています。

次の図に C コンパイルシステムの構成を示します。

図 1–1 C コンパイルシステムの構成

C コンパイルシステムのコンポーネントを示す図

次の表は、コンパイルシステムの構成要素を要約したものです。

表 1–1 C コンパイルシステムの構成要素

構成要素 

内容の説明 

使用時の注意 

cpp

プリプロセッサ (前処理系) 

-Xs のみ

acomp

コンパイラ (-Xs 以外のモードではプリプロセッサが組み込まれている)

 

ssbd

静的同期バグ検出 

(SPARC)

iropt

コードオプティマイザ (最適化部) 

-O-xO2-xO3-xO4-xO5-fast

fbe

アセンブラ 

 

cg

コード生成、インライン機能、アセンブラ 

(SPARC)

ipo

内部手続きオプティマイザ 

(SPARC)

postopt

ポストオプティマイザ 

(SPARC)

ir2hf

中間コード翻訳 

(x86) 

ube

コードジェネレータ 

(x86) 

ube_ipa

内部手続き解析プログラム 

(x86) 

ld

リンカー 

 

mcs

コメントセクションの操作 

-mr

1.6 C 関連のプログラミングツール

C プログラムの開発、保守、改良を行うときに役立つツールは多数あります。本書では、C にもっとも密接な 2 つのツール、cscopelint について説明します。また、ツールごとにマニュアルページが用意されています。

ソースの表示、デバッグ、およびパフォーマンス解析を行うツールも付属しています。「Sun Studio マニュアルへのアクセス方法」を参照してください。