本文に進む 日本−日本語
日本HPホーム 製品とサービス お客様サポート/ ダウンロード ソリューション ご購入の方法
≫ お問い合わせ
詳細検索オプション
日本HPホーム
HP C/ANSI C バージョン B.11.11.16 リリースノート > 第1章 HP C/ANSI C リリースノート

バージョン B.11.11.08 の新機能

≫ 

テクニカル ドキュメント

PDF版
フィードバック
ここから本文が始まります

 ≫ 目次

 ≫ 索引

HP C コンパイラのバージョン B.11.11.08 では、次の新機能がサポートされました。

restrict キーワード

これは C99 の機能です。 restrict キーワード は、ポインターを修飾し、restrict として宣言したポインター変数が別名定義されていないことをオプティマイザに示すのに使用します。これにより、オプティマイザは別名定義の解析を効率よく行うことができます。

このリリースでは、restrict キーワードのみをサポートし、この機能による最適化は行われません。

__typeof__ 演算子

typeof 構文 は、 typedef 名が使用できるところならどこでも使用することができます。たとえば、宣言やキャストとして、あるいはsizeof の中または__typeof__ の中でも使用できます。__typeof__ は、式のデータ型を参照する一つの方法です。

次の例では、 y はポインター x が指す型をもつ配列として宣言されています。

__typeof__ (*x) y[4];

次の例では、 y は文字型へのポインターの配列として宣言されています。

__typeof__ (__typeof__ (char *)[4]) y;

__restrict__ キーワード

このキーワードを使用すると、この修飾子で宣言されたポインター変数が別名定義されていないことをオプティマイザに示すことができます。コードの最適化に役立ちます。

注記: __restrict__ 修飾子は、ポインターに対してのみ使用できます。

例:

int a = 10;

int *__restrict__ b = &a;

__volatile__ キーワード

これはvolatile キーワードと同じです。

使用例:

__volatile__ int var;

C99 モード (-AC99 オプションを指定)

C99 特有の機能を使用する場合に、このオプションを指定します。 たとえば、restricttypeof のようなキーワードが識別されるようになります。(このオプションを指定しない場合は、 __restrict____typeof__ を使用する必要があります。)

+We[n1,n2,...,nN] オプション (警告をエラーとして通知)

このオプションを使用すると、コンパイラの警告 n1, n2, ..., nN がエラーメッセージに変換されます。数値が何も指定されない場合、選ばれたいくつかを除き、ほとんどの警告がエラーに変換されます。

非定数による集合体の初期化

配列や構造体のような集合体の初期化リストで、非定数式をイニシャライザとして指定できるようになりました。変数や関数呼び出しを含む演算式でも、有効な C の式であればイニシャライザとして指定できます。

以前は、集合体のイニシャライザには定数式しか指定できませんでした。

使用例:

int i, j;
/* ... */
int iarr[] = { i, j, i + j, i - j };

-include <file> オプション

このオプションを指定すると、翻訳単位が処理される前に、コンパイラにより翻訳単位のセットの先頭に <file> が挿入されます。

コマンド行で指定した各ソースファイルの第 1 行目が実行される前に、コマンド行の各 -include <file> オプションに対応する#include "<file>" 指令が暗黙的に実行されるため、効率的です。これは GCC 互換機能です。

使用例:

$ cc [cc opts] [-include <file>]* [cc opts] <source file(s)>

ここで、 [-include <file>]* は 0 個以上の -include <file> オプションを示します。

-include オプションはすべて、記述されている順に処理されます。

+O[no]clone オプション

このオプションを使用して、オプティマイザのクローン生成機能をオン/オフに切り替えることができます。デフォルトの設定はオンです。主に、クローンが多いとコードの性能に悪影響を受けるような場合のために用意されています。

インライン展開がオフに設定されていると、クローン生成はデフォルトでオフに設定されます。 +Onoinline+Oclone は、同時に指定できません。

+Olit=[all | const | none] オプション

+Olit オプションは、読み取り専用データセクションに配置されるデータ項目の型を指定します。 allconstnone の値から選ぶことができます。

+Olit=all は、すべての文字列変数と、ロード時や実行時の初期化を必要としないすべての定数修飾変数を読み取り専用データセクションに配置します。

+Olit=const は、通常const char * が使用されるようなコンテキストに現れるすべての文字列リテラルと、ロード時や実行時の初期化を必要としないすべての定数修飾変数を読み取り専用データセクションに配置します。

+Olit=none を指定した場合、定数は読み取り専用データセクションに配置されません。

+O[no]memory[=malloc] オプション

このオプションを使用して、メモリーの最適化を有効/無効にすることができます。また、malloc をリストに指定すると、メモリー割り当てのプロシージャコールを伴った最適化を有効/無効にします。このオプションは、デフォルトの設定では「無効」です。また、+OopenMP および +Oparallel と互換性が無いので、+OopenMP および +Oparallel オプションが有効になっている場合にはこのオプションは無視されます。

割り当て形 goto 機能 (assigned goto)

割り当て形 gotogcc 互換の機能で、ラベルを値として使用します。その関数内で定義されたラベルのアドレスを、単項演算子 && を使用して取り出して代入することができます。この値は void * 型です。

例:

void *ptr;
/* ... */
ptr = && label_foo;

これらの値を使用するには、そのアドレスにジャンプできる必要があります。これには、計算型 goto 文、 goto *EXP; を次の例のように使用します。

goto *ptr;

任意のvoid * 型の式が使用できます。

ローカル宣言ラベルのための __label__ 機能

ローカルラベルはただの識別子です。これは、通常の goto 文でジャンプできますが、有効範囲はそれが属する複文内に限定されます。

ローカルラベルの構文を次に示します。

__label__ LABEL;

または

__label__ LABEL1, LABEL2, ...;

HPC_DEBUG_COMPAT 環境変数

HP C では、-g オプションを指定しても、未使用のオブジェクト (構造体、共用体など) のデバッグ情報を出力しなくなりました。前の動作の情報を取得する場合 (プログラム内で使用されたか否かに関わりなくすべてのオブジェクトについてのデバッグ情報を出力する場合) は、コンパイル時のコマンド行に -g オプションを指定するとともに、環境変数 HPC_DEBUG_COMPAT をその環境で設定します。この環境変数には空の文字列を定義すれば十分です。特定の値を設定する必要はありません。

印刷用画面へ
プライバシー 本サイト利用時の合意事項
© 2006 Hewlett-Packard Development Company, L.P.