| 日本−日本語 |
|
|
|
![]() |
HP C/ANSI C バージョン B.11.11.16 リリースノート > 第1章 HP C/ANSI C リリースノートバージョン B.11.11.08 の新機能 |
|
HP C コンパイラのバージョン B.11.11.08 では、次の新機能がサポートされました。 これは C99 の機能です。 restrict キーワード は、ポインターを修飾し、restrict として宣言したポインター変数が別名定義されていないことをオプティマイザに示すのに使用します。これにより、オプティマイザは別名定義の解析を効率よく行うことができます。 このリリースでは、restrict キーワードのみをサポートし、この機能による最適化は行われません。 typeof 構文 は、 typedef 名が使用できるところならどこでも使用することができます。たとえば、宣言やキャストとして、あるいはsizeof の中または__typeof__ の中でも使用できます。__typeof__ は、式のデータ型を参照する一つの方法です。 次の例では、 y はポインター x が指す型をもつ配列として宣言されています。 __typeof__ (*x) y[4]; 次の例では、 y は文字型へのポインターの配列として宣言されています。 __typeof__ (__typeof__ (char *)[4]) y; このキーワードを使用すると、この修飾子で宣言されたポインター変数が別名定義されていないことをオプティマイザに示すことができます。コードの最適化に役立ちます。
例: int a = 10; int *__restrict__ b = &a; C99 特有の機能を使用する場合に、このオプションを指定します。 たとえば、restrict やtypeof のようなキーワードが識別されるようになります。(このオプションを指定しない場合は、 __restrict__ や__typeof__ を使用する必要があります。) このオプションを使用すると、コンパイラの警告 n1, n2, ..., nN がエラーメッセージに変換されます。数値が何も指定されない場合、選ばれたいくつかを除き、ほとんどの警告がエラーに変換されます。 配列や構造体のような集合体の初期化リストで、非定数式をイニシャライザとして指定できるようになりました。変数や関数呼び出しを含む演算式でも、有効な C の式であればイニシャライザとして指定できます。 以前は、集合体のイニシャライザには定数式しか指定できませんでした。 使用例:
このオプションを指定すると、翻訳単位が処理される前に、コンパイラにより翻訳単位のセットの先頭に <file> が挿入されます。 コマンド行で指定した各ソースファイルの第 1 行目が実行される前に、コマンド行の各 -include <file> オプションに対応する#include "<file>" 指令が暗黙的に実行されるため、効率的です。これは GCC 互換機能です。 使用例: $ cc [cc opts] [-include <file>]* [cc opts] <source file(s)> ここで、 [-include <file>]* は 0 個以上の -include <file> オプションを示します。 -include オプションはすべて、記述されている順に処理されます。 このオプションを使用して、オプティマイザのクローン生成機能をオン/オフに切り替えることができます。デフォルトの設定はオンです。主に、クローンが多いとコードの性能に悪影響を受けるような場合のために用意されています。 インライン展開がオフに設定されていると、クローン生成はデフォルトでオフに設定されます。 +Onoinline と +Oclone は、同時に指定できません。 +Olit オプションは、読み取り専用データセクションに配置されるデータ項目の型を指定します。 all、 const、none の値から選ぶことができます。 +Olit=all は、すべての文字列変数と、ロード時や実行時の初期化を必要としないすべての定数修飾変数を読み取り専用データセクションに配置します。 +Olit=const は、通常const char * が使用されるようなコンテキストに現れるすべての文字列リテラルと、ロード時や実行時の初期化を必要としないすべての定数修飾変数を読み取り専用データセクションに配置します。 +Olit=none を指定した場合、定数は読み取り専用データセクションに配置されません。 このオプションを使用して、メモリーの最適化を有効/無効にすることができます。また、malloc をリストに指定すると、メモリー割り当てのプロシージャコールを伴った最適化を有効/無効にします。このオプションは、デフォルトの設定では「無効」です。また、+OopenMP および +Oparallel と互換性が無いので、+OopenMP および +Oparallel オプションが有効になっている場合にはこのオプションは無視されます。 割り当て形 goto は gcc 互換の機能で、ラベルを値として使用します。その関数内で定義されたラベルのアドレスを、単項演算子 && を使用して取り出して代入することができます。この値は void * 型です。 例:
これらの値を使用するには、そのアドレスにジャンプできる必要があります。これには、計算型 goto 文、 goto *EXP; を次の例のように使用します。 goto *ptr; 任意のvoid * 型の式が使用できます。 ローカルラベルはただの識別子です。これは、通常の goto 文でジャンプできますが、有効範囲はそれが属する複文内に限定されます。 ローカルラベルの構文を次に示します。 __label__ LABEL; または __label__ LABEL1, LABEL2, ...; |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|||||||||||||||