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

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

この章では、Sun Studio C コンパイラに関する基本的な情報を紹介します。

1.1 Sun Studio 12 Update 1 Release での Version 5.10 の新機能

C コンパイラの現在のリリースには、次の新機能と変更された機能があります。

1.2 x86 の特記事項

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

従来の Sun 仕様の並列化プログラムは、x86 では使用できません。代わりに OpenMP を使用してください。従来の並列化指令を OpenMP へ変換する方法については、『Sun Studio: 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 をサポートしている場合は -xarch=sse2 でコンパイルします。

Solaris と Linux でも、固有の数学ライブラリ (たとえば、sin(x)) が同じではないため、演算結果が異なることがあります。

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

Solaris システムの Sun Studio 11 以降では、Sun Studio コンパイラによってコンパイルされたプログラムのバイナリには、そのコンパイル済みバイナリによって想定されている命令セットを示すアーキテクチャーハードウェアフラグが付いています。実行時にこれらのマーカーフラグが検査され、実行しようとしているハードウェアで、そのバイナリが実行できることが確認されます。

これらのアーキテクチャーハードウェアフラグを含まないプログラムを、適切な機能または命令セット拡張に対応していないプラットフォームで実行すると、セグメント例外、または明示的な警告メッセージなしの不正な結果が発生することがあります。

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

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

ILP32 32 ビットモデル用にコンパイルするには、—m 32 オプションを使用します。ILP64 64 ビットモデル用にコンパイルするには、—m64 オプションを使用します。

C 言語の int、long、およびポインタデータ型を指定する ILP32 モデルは、すべて 32 ビット拡張です。long およびポインタデータ型を指定する LP64 モデルは、すべて 64 ビット拡張です。Solaris および Linux OS は、LP64 メモリーモデルの大きなファイルや配列もサポートします。

—m64 を使用してコンパイルを行う場合、結果の実行可能ファイルは、64 ビットカーネルを実行する Solaris OS または Linux OS 配下の 64 ビット UltraSPARC(R) プロセッサまたは x86 プロセッサでのみ動作します。コンパイル、リンク、および 64 ビットオブジェクトの実行は、64 ビット実行をサポートする Solaris または Linux OS でのみ行うことができます。

1.5 準拠規格

このマニュアルで使用される C99 という用語は、ISO/IEC 9899:1990 の C プログラミング言語を表します。C90 という用語は、ISO/IEC 9899:1990 の C プログラミング言語を意味します。

Solaris プラットフォーム上では、このコンパイラは、C99 規格に完全に準拠しています (-xc99=all,lib —Xc を指定した場合)。

このコンパイラはまた、『Programming Language - C (ISO/IEC 9899:1999)』規格にも準拠しています。

このコンパイラは従来の K&R C (Kernighan と Rithcie、つまり ANSI C の前段階) もサポートしているため、ISO C への移行が容易に行えます。

C90 の実装固有の動作については、「D.1.17 _Pragma」を参照してください。

C99 機能の詳細は、表 C–6 を参照してください。

1.6 C Readme ファイル

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

Sun Studio のこのリリースと以前のリリースに関する C コンパイラの Readme は、Sun Developer Network の Sun Studio ポータル http://developers.sun.com/sunstudio/documentation で入手できます。

1.7 マニュアルページ

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

次のコマンドを実行することにより、C コンパイラのマニュアルページを表示できます。


example% man cc

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


example% man -s 3M ieee_flags

1.8 コンパイラの構成

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) 

ld

リンカー 

 

mcs

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

-mr

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

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